Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0adc0de authored by Zhi Dou's avatar Zhi Dou Committed by Gerrit Code Review
Browse files

Merge "add multithreads testing for flagMap and flagval" into main

parents 8fb8e6a3 4f775f93
Loading
Loading
Loading
Loading
+52 −0
Original line number Diff line number Diff line
@@ -26,6 +26,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

import java.util.Objects;
import java.util.concurrent.CyclicBarrier;

@RunWith(JUnit4.class)
public class FlagTableTest {

@@ -100,4 +103,53 @@ public class FlagTableTest {
        assertEquals(-1, node7.getNextOffset());
        assertEquals(-1, node8.getNextOffset());
    }

    @Test
    public void testFlagTable_multithreadsRead() throws Exception {
        FlagTable flagTable = FlagTable.fromBytes(TestDataUtils.getTestFlagMapByteBuffer(2));

        int numberOfThreads = 8;
        Thread[] threads = new Thread[numberOfThreads];
        final CyclicBarrier gate = new CyclicBarrier(numberOfThreads + 1);
        String[] expects = {
            "enabled_ro",
            "enabled_rw",
            "enabled_rw",
            "disabled_rw",
            "enabled_fixed_ro",
            "enabled_ro",
            "enabled_fixed_ro",
            "disabled_rw"
        };
        int[] packageIds = {0, 0, 2, 1, 1, 1, 2, 0};

        for (int i = 0; i < numberOfThreads; i++) {
            String expectRet = expects[i];
            int packageId = packageIds[i];
            threads[i] =
                    new Thread() {
                        @Override
                        public void run() {
                            try {
                                gate.await();
                            } catch (Exception e) {
                            }
                            for (int j = 0; j < 10; j++) {
                                if (!Objects.equals(
                                        expectRet,
                                        flagTable.get(packageId, expectRet).getFlagName())) {
                                    throw new RuntimeException();
                                }
                            }
                        }
                    };
            threads[i].start();
        }

        gate.await();

        for (int i = 0; i < numberOfThreads; i++) {
            threads[i].join();
        }
    }
}
+42 −0
Original line number Diff line number Diff line
@@ -28,6 +28,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

import java.util.Objects;
import java.util.concurrent.CyclicBarrier;

@RunWith(JUnit4.class)
public class FlagValueListTest {

@@ -74,4 +77,43 @@ public class FlagValueListTest {
        fNode = flagTable.get(pNode.getPackageId(), "enabled_fixed_ro");
        assertTrue(flagValueList.getBoolean(pNode.getBooleanStartIndex() + fNode.getFlagIndex()));
    }

    @Test
    public void testFlagValueList_multithreadsRead() throws Exception {
        FlagValueList flagValueList =
                FlagValueList.fromBytes(TestDataUtils.getTestFlagValByteBuffer(2));

        int numberOfThreads = 8;
        Thread[] threads = new Thread[numberOfThreads];
        final CyclicBarrier gate = new CyclicBarrier(numberOfThreads + 1);
        boolean[] expects = {false, true, true, false, true, true, true, true};

        for (int i = 0; i < numberOfThreads; i++) {
            boolean expectRet = expects[i];
            int position = i;
            threads[i] =
                    new Thread() {
                        @Override
                        public void run() {
                            try {
                                gate.await();
                            } catch (Exception e) {
                            }
                            for (int j = 0; j < 10; j++) {
                                if (!Objects.equals(
                                        expectRet, flagValueList.getBoolean(position))) {
                                    throw new RuntimeException();
                                }
                            }
                        }
                    };
            threads[i].start();
        }

        gate.await();

        for (int i = 0; i < numberOfThreads; i++) {
            threads[i].join();
        }
    }
}