Merge pull request #35 from kiwix/testing_coverage

This commit is contained in:
Matthieu Gautier 2023-06-28 15:34:34 +02:00 committed by GitHub
commit 420794ed48
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 239 additions and 42 deletions

View File

@ -93,7 +93,7 @@ METHOD0(jobjectArray, getIllustrations) {
jobjectArray retArray = createArray(env, illustrations.size(), "org/kiwix/libkiwix/Illustration");
size_t index = 0;
for (auto illu: illustrations) {
auto wrapper = BUILD_WRAPPER("org/kiwix/libkiwx/Illustration", illu);
auto wrapper = BUILD_WRAPPER("org/kiwix/libkiwix/Illustration", illu);
env->SetObjectArrayElement(retArray, index++, wrapper);
}
return retArray;

View File

@ -164,7 +164,7 @@ METHOD(jobject, getEntryByTitle__I, jint index) {
}
METHOD(jboolean, hasEntryByTitle, jstring title) {
return TO_JNI(THIS->hasEntryByPath(TO_C(title)));
return TO_JNI(THIS->hasEntryByTitle(TO_C(title)));
}
METHOD(jobject, getEntryByClusterOrder, jint index) {

View File

@ -66,22 +66,19 @@ METHOD0(void, dispose)
METHOD0(jboolean, hasNext) {
switch (get_order(env, thisObj)) {
case 0: {
PATH_NATIVE_TYPE next(*GET_PTR(PATH_NATIVE_TYPE));
next++;
PATH_NATIVE_TYPE current(*GET_PTR(PATH_NATIVE_TYPE));
auto end = getPtr<PATH_NATIVE_TYPE>(env, thisObj, "nativeHandleEnd");
return next == *end;
return current != *end;
}
case 1: {
TITLE_NATIVE_TYPE next(*GET_PTR(TITLE_NATIVE_TYPE));
next++;
TITLE_NATIVE_TYPE current(*GET_PTR(TITLE_NATIVE_TYPE));
auto end = getPtr<TITLE_NATIVE_TYPE>(env, thisObj, "nativeHandleEnd");
return next == *end;
return current != *end;
}
case 2: {
EFFICIENT_NATIVE_TYPE next(*GET_PTR(EFFICIENT_NATIVE_TYPE));
next++;
EFFICIENT_NATIVE_TYPE current(*GET_PTR(EFFICIENT_NATIVE_TYPE));
auto end = getPtr<EFFICIENT_NATIVE_TYPE>(env, thisObj, "nativeHandleEnd");
return next == *end;
return current != *end;
}
default:
// unreachable!()
@ -92,18 +89,18 @@ METHOD0(jboolean, hasNext) {
METHOD0(jobject, next) {
switch (get_order(env, thisObj)) {
case 0: {
(*GET_PTR(PATH_NATIVE_TYPE))++;
zim::Entry entry = **GET_PTR(PATH_NATIVE_TYPE);
(*GET_PTR(PATH_NATIVE_TYPE))++;
return BUILD_WRAPPER("org/kiwix/libzim/Entry", entry);
}
case 1: {
(*GET_PTR(TITLE_NATIVE_TYPE))++;
zim::Entry entry = **GET_PTR(TITLE_NATIVE_TYPE);
(*GET_PTR(TITLE_NATIVE_TYPE))++;
return BUILD_WRAPPER("org/kiwix/libzim/Entry", entry);
}
case 2: {
(*GET_PTR(EFFICIENT_NATIVE_TYPE))++;
zim::Entry entry = **GET_PTR(EFFICIENT_NATIVE_TYPE);
(*GET_PTR(EFFICIENT_NATIVE_TYPE))++;
return BUILD_WRAPPER("org/kiwix/libzim/Entry", entry);
}
default:

View File

@ -57,10 +57,8 @@ METHOD0(jstring, getZimId) {
}
METHOD0(jboolean, hasNext) {
zim::SearchIterator next(*THIS);
next++;
auto end = getPtr<NATIVE_TYPE>(env, thisObj, "nativeHandleEnd");
return next == *end;
return *THIS != *end;
}
METHOD0(jobject, next) {

View File

@ -2,17 +2,24 @@
<id>00000000-0000-0000-0000-000000000000</id>
<entry>
<title>Test ZIM file</title>
<id>urn:uuid:86c91e51-55bf-8882-464e-072aca37a3e8</id>
<id>urn:uuid:e34f5109-ed0d-b93e-943d-06f7717c7340</id>
<icon>/meta?name=favicon&amp;content=small</icon>
<updated>2020-11-27:00::00:Z</updated>
<language>en</language>
<summary>This is a ZIM file used in libzim unit-tests</summary>
<tags>unit;test</tags>
<path>small.zim</path>
<language>eng</language>
<summary>Description</summary>
<tags>_category:Category;_ftindex:yes;_ftindex:yes;_pictures:yes;_videos:yes;_details:yes</tags>
<link type="text/html" href="/small" />
<author>
<name>Kiwix</name>
<name>Creator</name>
</author>
<link rel="http://opds-spec.org/acquisition/open-access" type="application/x-zim" href="http://localhost/small.zim" length="78982" />
<publisher>
<name>Publisher</name>
</publisher>
<category>Category</category>
<articleCount>1</articleCount>
<mediaCount>1</mediaCount>
<link rel="http://opds-spec.org/acquisition/open-access" type="application/x-zim" href="http://localhost/small.zim" length="66560" />
<link rel="http://opds-spec.org/image/thumbnail" type="image/png" href="/meta?name=favicon&amp;content=small" />
</entry>
</feed>

View File

@ -13,10 +13,11 @@ zimwriterfs -w main.html \
-I favicon.png \
-l eng \
-t "Test ZIM file" \
-d "N/A" \
-L "Test File" \
-c "N/A" \
-p "N/A" \
-d "Description" \
-L "Long Description" \
-c "Creator" \
-p "Publisher" \
--tags "_category:Category" \
small_zimfile_data \
small.zim \
&& echo 'small.zim was successfully created' \

3
lib/src/test/library.xml Normal file
View File

@ -0,0 +1,3 @@
<library version="20110515">
<book id="e34f5109-ed0d-b93e-943d-06f7717c7340" path="small.zim" title="Test ZIM file" description="Description" language="eng" creator="Creator" publisher="Publisher" name="Test" tags="_category:Category;_ftindex:yes;_ftindex:yes;_pictures:yes;_videos:yes;_details:yes" faviconMimeType="image/png" favicon="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" date="2023-06-21" url="http://localhost/small.zim" articleCount="1" mediaCount="1" size="65" />
</library>

Binary file not shown.

Binary file not shown.

View File

@ -50,31 +50,109 @@ public class test {
throws IOException {
// test the zim file main page title
TestEntry mainPage = archive.getMainEntry();
assertTrue(mainPage.isRedirect());
assertEquals("mainPage", mainPage.getTitle());
assertEquals("Test ZIM file", mainPage.getItem(true).getTitle());
assertEquals("Test ZIM file", mainPage.getRedirectEntry().getTitle());
assertEquals("Test ZIM file", mainPage.getRedirect().getTitle());
// test zim file main url
assertEquals("mainPage", mainPage.getPath());
assertEquals("main.html", mainPage.getItem(true).getPath());
// test zim file size
assertEquals(66910, archive.getFilesize()); // The file size is in KiB
assertEquals(66937, archive.getFilesize()); // The file size is in KiB
// test zim file content
byte[] mainData = getFileContent("small_zimfile_data/main.html");
byte[] inZimMainData = archive.getEntryByPath("main.html").getItem(true).getData().getData();
assert(Arrays.equals(mainData, inZimMainData));
assertTrue(Arrays.equals(mainData, inZimMainData));
// test zim file icon
assertEquals(true, archive.hasIllustration(48));
assertTrue(archive.hasIllustration(48));
byte[] faviconData = getFileContent("small_zimfile_data/favicon.png");
TestItem item = archive.getIllustrationItem(48);
assertEquals(faviconData.length, item.getSize());
assert(Arrays.equals(faviconData, item.getData().getData()));
assertEquals("image/png", item.getMimetype());
TestBlob illustrationData = item.getData();
assertEquals(faviconData.length, illustrationData.size());
assertTrue(Arrays.equals(faviconData, illustrationData.getData()));
// Checking direct access information
DirectAccessInfo dai = item.getDirectAccessInformation();
assertNotEquals("", dai.filename);
byte[] readData = getFileContentPartial(dai.filename, (int) dai.offset, (int) item.getSize());
assert(Arrays.equals(faviconData, readData));
assertTrue(Arrays.equals(faviconData, readData));
// Checking all metadata
assertFalse(archive.isMultiPart());
assertTrue(archive.hasNewNamespaceScheme());
assertTrue(archive.hasChecksum());
assertEquals("4a2709fddbee8c27db708c20b4952a06", archive.getChecksum());
assertTrue(archive.hasTitleIndex());
assertTrue(archive.hasFulltextIndex());
assertTrue(archive.hasMainEntry());
long[] illuSizes = {48};
assertTrue(Arrays.equals(illuSizes, archive.getIllustrationSizes()));
String[] metaKeys = {"Counter", "Creator", "Date", "Description", "Illustration_48x48@1", "Language", "LongDescription", "Name", "Publisher", "Scraper", "Tags", "Title"};
assertTrue(Arrays.equals(
metaKeys,
archive.getMetadataKeys()
));
assertEquals("e34f5109-ed0d-b93e-943d-06f7717c7340", archive.getUuid());
assertEquals(1, archive.getMediaCount());
assertEquals(1, archive.getArticleCount());
assertEquals(2, archive.getEntryCount());
assertEquals(19, archive.getAllEntryCount());
assertTrue(archive.hasEntryByTitle("Test ZIM file"));
assertTrue(archive.hasEntryByPath("main.html"));
assertEquals("Test ZIM file", archive.getEntryByTitle("Test ZIM file").getTitle());
assertEquals("main.html", archive.getEntryByPath("main.html").getPath());
assertEquals("Test ZIM file", archive.getEntryByTitle(0).getTitle());
assertEquals("main.html", archive.getEntryByPath(1).getPath());
assertEquals("main.html", archive.getEntryByClusterOrder(0).getPath());
assertEquals("Test ZIM file", archive.getMetadata("Title"));
assertEquals("Title", archive.getMetadataItem("Title").getTitle());
assertFalse(archive.getRandomEntry().getTitle().isEmpty());
{
TestEntryIterator iter = archive.iterByPath();
assertTrue(iter.hasNext());
assertEquals("favicon.png", iter.next().getPath());
assertEquals("main.html", iter.next().getPath());
assertFalse(iter.hasNext());
}
{
TestEntryIterator iter = archive.iterByTitle();
assertTrue(iter.hasNext());
assertEquals("main.html", iter.next().getPath());
// No favicon, because favicon is not a main article (no title)
assertFalse(iter.hasNext());
}
{
TestEntryIterator iter = archive.iterEfficient();
assertTrue(iter.hasNext());
assertEquals("main.html", iter.next().getPath());
assertEquals("favicon.png", iter.next().getPath());
assertFalse(iter.hasNext());
}
{
TestEntryIterator iter = archive.findByPath("ma");
assertTrue(iter.hasNext());
assertEquals("main.html", iter.next().getPath());
assertFalse(iter.hasNext());
}
{
TestEntryIterator iter = archive.findByTitle("Test");
assertTrue(iter.hasNext());
assertEquals("main.html", iter.next().getPath());
assertFalse(iter.hasNext());
}
}
@Test
@ -82,6 +160,8 @@ public class test {
throws JNIKiwixException, IOException, ZimFileFormatException {
TestArchive archive = new TestArchive("small.zim");
testArchive(archive);
assertTrue(archive.check());
assertEquals("small.zim", archive.getFilename());
archive.dispose();
// test reader with invalid zim file
@ -100,6 +180,8 @@ public class test {
FileInputStream fis = new FileInputStream("small.zim");
TestArchive archive = new TestArchive(fis.getFD());
testArchive(archive);
assertTrue(archive.check());
assertEquals("", archive.getFilename());
archive.dispose();
}
@ -109,28 +191,60 @@ public class test {
File plainArchive = new File("small.zim");
FileInputStream fis = new FileInputStream("small.zim.embedded");
TestArchive archive = new TestArchive(fis.getFD(), 8, plainArchive.length());
// This fails. See https://github.com/openzim/libzim/issues/812
//assertTrue(archive.check());
testArchive(archive);
assertEquals("", archive.getFilename());
archive.dispose();
}
@Test
public void testLibrary()
private void testLibrary(TestLibrary lib)
throws IOException {
TestLibrary lib = new TestLibrary();
TestManager manager = new TestManager(lib);
String content = getTextFileContent("catalog.xml");
manager.readOpds(content, "http://localhost");
assertEquals(lib.getBookCount(true, true), 1);
String[] bookIds = lib.getBooksIds();
assertEquals(bookIds.length, 1);
lib.filter(new Filter().local(true));
assertTrue(Arrays.equals(lib.getBooksPublishers(), new String[]{"Publisher"}));
assertTrue(Arrays.equals(lib.getBooksCreators(), new String[]{"Creator"}));
System.out.println(Arrays.toString(lib.getBooksCategories()));
assertTrue(Arrays.equals(lib.getBooksCategories(), new String[]{"Category"}));
assertTrue(Arrays.equals(lib.getBooksLanguages(), new String[]{"eng"}));
// getArchiveById needs books with valid path. Which is not possible by definition if library is initialized by opds stream.
//assertEquals("86c91e51-55bf-8882-464e-072aca37a3e8", lib.getArchiveById("86c91e51-55bf-8882-464e-072aca37a3e8").getUuid());
TestBook book = lib.getBookById(bookIds[0]);
assertEquals(book.getTitle(), "Test ZIM file");
assertEquals(book.getTags(), "unit;test");
assertEquals(book.getTags(), "_category:Category;_ftindex:yes;_ftindex:yes;_pictures:yes;_videos:yes;_details:yes");
assertEquals(book.getIllustration(48).width(), 48);
assertEquals(book.getIllustration(48).url(), "http://localhost/meta?name=favicon&content=small");
assertEquals(book.getUrl(), "http://localhost/small.zim");
assertEquals(book.getDescription(), "Description");
assertEquals(book.getCreator(), "Creator");
assertEquals(book.getPublisher(), "Publisher");
assertEquals(book.getFlavour(), "");
assertEquals(book.getCategory(), "Category");
assertEquals(book.getArticleCount(), 1);
assertEquals(book.getMediaCount(), 1);
assertEquals(book.getSize(), 66560);
Illustration[] illustrations = book.getIllustrations();
assertEquals(1, illustrations.length);
assertEquals(book.getTagStr("video"), "");
}
@Test
public void testLibrarySimple() throws IOException {
TestLibrary lib = new TestLibrary();
TestManager manager = new TestManager(lib);
manager.addBookFromPath("small.zim", "small.zim", "http://localhost/small.zim", true);
testLibrary(lib);
String[] bookIds = lib.getBooksIds();
TestBook book = lib.getBookById(bookIds[0]);
assertEquals(book.getIllustration(48).url(), "");
assertEquals(book.getPath(), new File("small.zim").getAbsolutePath());
assertEquals(book.getHumanReadableIdFromPath(), "small");
assertTrue(book.isPathValid());
// remove book from library by id
lib.removeBookById(bookIds[0]);
@ -138,6 +252,50 @@ public class test {
assertEquals(bookIds.length, 0);
}
@Test
public void testLibraryXml() throws IOException {
TestLibrary lib = new TestLibrary();
TestManager manager = new TestManager(lib);
manager.readFile("library.xml");
testLibrary(lib);
String[] bookIds = lib.getBooksIds();
TestBook book = lib.getBookById(bookIds[0]);
assertEquals(book.getIllustration(48).url(), "");
assertEquals(book.getPath(), new File("small.zim").getAbsolutePath());
assertEquals(book.getHumanReadableIdFromPath(), "small");
assertTrue(book.isPathValid());
}
@Test
public void testLibraryXmlContent() throws IOException {
TestLibrary lib = new TestLibrary();
TestManager manager = new TestManager(lib);
String content = getTextFileContent("library.xml");
manager.readXml(content, "library.xml");
testLibrary(lib);
String[] bookIds = lib.getBooksIds();
TestBook book = lib.getBookById(bookIds[0]);
assertEquals(book.getIllustration(48).url(), "");
assertEquals(book.getPath(), new File("small.zim").getAbsolutePath());
assertEquals(book.getHumanReadableIdFromPath(), "small");
assertTrue(book.isPathValid());
}
@Test
public void testLibraryOPDS() throws IOException {
TestLibrary lib = new TestLibrary();
TestManager manager = new TestManager(lib);
String content = getTextFileContent("catalog.xml");
manager.readOpds(content, "http://localhost");
testLibrary(lib);
String[] bookIds = lib.getBooksIds();
TestBook book = lib.getBookById(bookIds[0]);
assertEquals(book.getIllustration(48).url(), "http://localhost/meta?name=favicon&content=small");
assertEquals(book.getPath(), "");
assertEquals(book.getHumanReadableIdFromPath(), "");
assertFalse(book.isPathValid());
}
@Test
public void testServer() throws ZimFileFormatException, JNIKiwixException {
TestArchive archive = new TestArchive("small.zim");
@ -148,7 +306,13 @@ public class test {
assertEquals(1, lib.getBookCount(true, true));
TestServer server = new TestServer(lib);
server.setPort(8080);
assertEquals(true, server.start());
server.setRoot("FOO");
server.setAddress("127.0.0.1");
server.setNbThreads(1);
server.setBlockExternalLinks(true);
server.setTaskbar(true, true);
assertTrue(server.start());
server.stop();
}
@Test
@ -176,6 +340,7 @@ public class test {
assertEquals(bookmark.getUrl(), book.getUrl());
assertEquals(bookmark.getLanguage(), book.getLanguage());
assertEquals(bookmark.getDate(), book.getDate());
assertEquals(bookmark.getBookTitle(), book.getName());
// remove bookmark from library
lib.removeBookmark(bookmark.getBookId(), bookmark.getUrl());
bookmarkArray = lib.getBookmarks(true);
@ -187,21 +352,47 @@ public class test {
TestArchive archive = new TestArchive("small.zim");
TestSearcher searcher = new TestSearcher(archive);
TestQuery query = new TestQuery("test");
searcher.setVerbose(true);
TestQuery query = new TestQuery("test__");
query.setQuery("test");
TestSearch search = searcher.search(query);
int estimatedMatches = (int) search.getEstimatedMatches();
assertEquals(1, estimatedMatches);
TestSearchIterator iterator = search.getResults(0, estimatedMatches);
assertTrue(iterator.hasNext());
assertEquals("Test ZIM file", iterator.getTitle());
assertEquals("main.html", iterator.getPath());
assertEquals(100, iterator.getScore());
assertEquals("<b>Test</b> ZIM file", iterator.getSnippet());
assertEquals(3, iterator.getWordCount());
assertEquals(0, iterator.getFileIndex());
assertEquals(-1, iterator.getSize());
assertEquals("e34f5109-ed0d-b93e-943d-06f7717c7340", iterator.getZimId());
TestEntry entry = iterator.next();
assertEquals("main.html", entry.getPath());
query.setGeorange(50,70,50);
assertEquals(0, searcher.search(query).getEstimatedMatches());
searcher.dispose();
TestSearcher searcher2 = new TestSearcher(new TestArchive[0]);
searcher2.addArchive(archive);
assertEquals(1, searcher2.search(new TestQuery("test")).getEstimatedMatches());
TestSuggestionSearcher suggestionSearcher = new TestSuggestionSearcher(archive);
suggestionSearcher.setVerbose(true);
TestSuggestionSearch suggestionSearch = suggestionSearcher.suggest("test");
int matches = (int) suggestionSearch.getEstimatedMatches();
assertEquals(1, matches);
TestSuggestionIterator results = suggestionSearch.getResults(0, matches);
assertTrue(results.hasNext());
TestSuggestionItem suggestionItem = results.next();
assertFalse(results.hasNext());
assertEquals("Test ZIM file", suggestionItem.getTitle());
assertEquals("main.html", suggestionItem.getPath());
assertTrue(suggestionItem.hasSnippet());
assertEquals("<b>Test</b> ZIM file", suggestionItem.getSnippet());
suggestionSearcher.dispose();
}