static void testFindPublicationRef(CuTest *tc) { int res; KSI_PublicationsFile *pubFile = NULL; KSI_PublicationRecord *pubRec = NULL; KSI_Integer *pubTime = NULL; KSI_LIST(KSI_Utf8String) *pubRefList = NULL; size_t i; int isPubRefFound = 0; KSI_CTX *ctx = NULL; res = KSITest_CTX_clone(&ctx); CuAssert(tc, "Unable to create KSI context.", res == KSI_OK && ctx != NULL); res = KSITest_setDefaultPubfileAndVerInfo(ctx); CuAssert(tc, "Unable to set default values to context.", res == KSI_OK); KSI_ERR_clearErrors(ctx); res = KSI_CTX_setPublicationUrl(ctx, getFullResourcePathUri(TEST_PUBLICATIONS_FILE)); CuAssert(tc, "Unable to set pubfile URI.", res == KSI_OK); res = KSI_receivePublicationsFile(ctx, &pubFile); CuAssert(tc, "Unable to get publications file.", res == KSI_OK && pubFile != NULL); res = KSI_verifyPublicationsFile(ctx, pubFile); CuAssert(tc, "Unable to verify publications file.", res == KSI_OK); res = KSI_Integer_new(ctx, 1397520000, &pubTime); CuAssert(tc, "Unable to create ksi integer object.", res == KSI_OK && pubTime != NULL); res = KSI_PublicationsFile_getPublicationDataByTime(pubFile, pubTime, &pubRec); CuAssert(tc, "Unable to get publication record by publication date.", res == KSI_OK && pubRec != NULL); KSI_Integer_free(pubTime); pubTime = NULL; res = KSI_PublicationRecord_getPublicationRefList(pubRec, &pubRefList); CuAssert(tc, "Unable to get publications ref list", res == KSI_OK && pubRefList != NULL); for (i = 0; i < KSI_Utf8StringList_length(pubRefList); i++) { KSI_Utf8String *pubRef = NULL; res = KSI_Utf8StringList_elementAt(pubRefList, i, &pubRef); CuAssert(tc, "Unable to get element from list", res == KSI_OK && pubRef != NULL); if (!strcmp("Financial Times, ISSN: 0307-1766, 2014-04-17", KSI_Utf8String_cstr(pubRef))) { isPubRefFound = 1; } } CuAssert(tc, "Financial times publication not found", isPubRefFound); KSI_PublicationsFile_free(pubFile); KSI_CTX_free(ctx); }
static void testFindPublicationRef(CuTest *tc) { int res; KSI_PublicationsFile *pubFile = NULL; KSI_PublicationRecord *pubRec = NULL; KSI_Integer *pubTime = NULL; KSI_LIST(KSI_Utf8String) *pubRefList = NULL; size_t i; int isPubRefFound = 0; KSI_ERR_clearErrors(ctx); res = KSI_receivePublicationsFile(ctx, &pubFile); CuAssert(tc, "Unable to get publications file.", res == KSI_OK && pubFile != NULL); res = KSI_Integer_new(ctx, 1397520000, &pubTime); CuAssert(tc, "Unable to create ksi integer object.", res == KSI_OK && pubTime != NULL); res = KSI_PublicationsFile_getPublicationDataByTime(pubFile, pubTime, &pubRec); CuAssert(tc, "Unable to get publication record by publication date.", res == KSI_OK && pubRec != NULL); KSI_Integer_free(pubTime); pubTime = NULL; res = KSI_PublicationRecord_getPublicationRefList(pubRec, &pubRefList); CuAssert(tc, "Unable to get publications ref list", res == KSI_OK && pubRefList != NULL); for (i = 0; i < KSI_Utf8StringList_length(pubRefList); i++) { KSI_Utf8String *pubRef = NULL; res = KSI_Utf8StringList_elementAt(pubRefList, i, &pubRef); CuAssert(tc, "Unable to get element from list", res == KSI_OK && pubRef != NULL); if (!strcmp("Financial Times, ISSN: 0307-1766, 2014-04-17", KSI_Utf8String_cstr(pubRef))) { isPubRefFound = 1; } } CuAssert(tc, "Financial times publication not found", isPubRefFound); }
char *KSI_PublicationRecord_toString(KSI_PublicationRecord *t, char *buffer, size_t buffer_len) { int res = KSI_UNKNOWN_ERROR; char *ret = NULL; char tmp[256]; size_t len = 0; size_t i; len += KSI_snprintf(buffer + len, buffer_len - len, "%s", KSI_PublicationData_toString(t->publishedData, tmp, sizeof(tmp))); for (i = 0; i < KSI_Utf8StringList_length(t->publicationRef); i++) { KSI_Utf8String *ref = NULL; res = KSI_Utf8StringList_elementAt(t->publicationRef, i, &ref); if (res != KSI_OK) goto cleanup; len += KSI_snprintf(buffer + len, buffer_len - len, "\nRef: %s", KSI_Utf8String_cstr(ref)); } ret = buffer; cleanup: return ret; }
int KSI_PublicationRecord_clone(const KSI_PublicationRecord *rec, KSI_PublicationRecord **clone){ int res = KSI_UNKNOWN_ERROR; KSI_PublicationRecord *tmp = NULL; size_t i = 0; if (rec == NULL) { res = KSI_INVALID_ARGUMENT; goto cleanup; } KSI_ERR_clearErrors(rec->ctx); if (clone == NULL) { KSI_pushError(rec->ctx, res = KSI_INVALID_ARGUMENT, NULL); goto cleanup; } res = KSI_PublicationRecord_new(rec->ctx, &tmp); if (res != KSI_OK) { KSI_pushError(rec->ctx, res, NULL); goto cleanup; } /*Copy publication references*/ res = KSI_Utf8StringList_new(&(tmp->publicationRef)); if (res != KSI_OK) goto cleanup; for (i = 0; i < KSI_Utf8StringList_length(rec->publicationRef); i++){ KSI_Utf8String *str = NULL; KSI_Utf8String *ref = NULL; res = KSI_Utf8StringList_elementAt(rec->publicationRef, i, &str); if (res != KSI_OK) { KSI_pushError(rec->ctx, res, NULL); goto cleanup; } res = KSI_Utf8StringList_append(tmp->publicationRef, ref = KSI_Utf8String_ref(str)); if (res != KSI_OK) { /* Cleanup the reference. */ KSI_Utf8String_ref(ref); KSI_pushError(rec->ctx, res, NULL); goto cleanup; } } /*Copy publication data*/ res = KSI_PublicationData_new(rec->ctx, &(tmp->publishedData)); if (res != KSI_OK) { KSI_pushError(rec->ctx, res, NULL); goto cleanup; } tmp->publishedData->ctx = rec->ctx; tmp->publishedData->imprint = KSI_DataHash_ref(rec->publishedData->imprint); tmp->publishedData->time = KSI_Integer_ref(rec->publishedData->time); *clone = tmp; tmp = NULL; res = KSI_OK; cleanup: KSI_PublicationRecord_free(tmp); return res; }