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

Commit 4f775f93 authored by Zhi Dou's avatar Zhi Dou
Browse files

add multithreads testing for flagMap and flagval

Test: atest aconfig_storage_file.test.java
Change-Id: I8c3d788baf217cf093f261b0f9981f0a45f6230c
parent 8fb8e6a3
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();
        }
    }
}