package me.devsaki.hentoid.db; import android.test.AndroidTestCase; import android.test.RenamingDelegatingContext; import java.util.ArrayList; import java.util.List; import java.util.Random; import me.devsaki.hentoid.database.HentoidDB; import me.devsaki.hentoid.database.domains.Attribute; import me.devsaki.hentoid.database.domains.Content; import me.devsaki.hentoid.enums.AttributeType; import me.devsaki.hentoid.enums.StatusContent; import me.devsaki.hentoid.util.AttributeMap; import me.devsaki.hentoid.util.LogHelper; /** * Created by neko on 15/06/2015. * Basic database test case * </p> * TODO: Update with new Testing Support Library (and possibly ContentV2) */ public class TestHentoidDB extends AndroidTestCase { private static final String TAG = LogHelper.makeLogTag(TestHentoidDB.class); boolean locker1, locker2, locker3, locker4; public void testLock() { List<Content> contents = generateRandomContent(); RenamingDelegatingContext context = new RenamingDelegatingContext(getContext(), "test_"); HentoidDB db = HentoidDB.getInstance(context); db.insertContents(contents.toArray(new Content[contents.size()])); try { new Thread(() -> { try { RenamingDelegatingContext context1 = new RenamingDelegatingContext(getContext(), "test_"); HentoidDB db1 = HentoidDB.getInstance(context1); for (int i = 0; i < 100; i++) { List<Content> contents1 = generateRandomContent(); db1.insertContents(contents1.toArray(new Content[contents1.size()])); } } catch (Exception ex) { LogHelper.e(TAG, ex, "Error"); } locker1 = true; }).start(); new Thread(() -> { try { RenamingDelegatingContext context12 = new RenamingDelegatingContext(getContext(), "test_"); HentoidDB db12 = HentoidDB.getInstance(context12); for (int i = 0; i < 100; i++) { List<Content> contents12 = generateRandomContent(); db12.insertContents(contents12.toArray(new Content[contents12.size()])); } } catch (Exception ex) { LogHelper.e(TAG, ex, "Error"); } locker2 = true; }).start(); new Thread(() -> { try { RenamingDelegatingContext context13 = new RenamingDelegatingContext(getContext(), "test_"); HentoidDB db13 = HentoidDB.getInstance(context13); for (int i = 0; i < 100; i++) { db13.selectContentByQuery("", 1, 10, false); } } catch (Exception ex) { LogHelper.e(TAG, ex, "Error"); } locker3 = true; }).start(); new Thread(() -> { try { RenamingDelegatingContext context14 = new RenamingDelegatingContext(getContext(), "test_"); HentoidDB db14 = HentoidDB.getInstance(context14); for (int i = 0; i < 100; i++) { db14.selectContentByStatus(StatusContent.DOWNLOADED); } } catch (Exception ex) { LogHelper.e(TAG, ex, "Error"); } locker4 = true; }).start(); //noinspection StatementWithEmptyBody while (!(locker1 && locker2 && locker3 && locker4)) ; LogHelper.i(TAG, "DB Lock: Success"); } catch (Exception ex) { LogHelper.e(TAG, ex, "Error"); } } private List<Content> generateRandomContent() { List<Content> contents = new ArrayList<>(); Random randomGenerator = new Random(); for (int i = 0; i < 10; i++) { int k = randomGenerator.nextInt(); AttributeMap attributeMap = new AttributeMap(); for (AttributeType type : AttributeType.values()) { for (int j = 0; j < 10; j++) { int l = randomGenerator.nextInt(); attributeMap.add(new Attribute() .setUrl("" + l) .setName("n" + l) .setType(type)); } } contents.add(new Content() .setAttributes(attributeMap) .setUrl("/doujinshi/u" + k) .setCoverImageUrl("c" + k) .setDownloadDate(1000 * k) .setPercent(10.0 * k) .setQtyPages(k * 12) .setTitle("t " + k) .setStatus(StatusContent.DOWNLOADED) .setUploadDate(k * 2000)); } return contents; } }