Example #1
0
END_TEST

//--------------------

START_TEST (test_simple_db)
{
    GlyrQuery q;
    setup (&q,GLYR_GET_LYRICS,10);
    glyr_opt_artist (&q,"Equi");
    glyr_opt_title (&q,"lala");

    GlyrDatabase * db = setup_db();

    GlyrMemCache * ct = glyr_cache_new();

    glyr_cache_set_data (ct,g_strdup ("test"),-1);

    glyr_db_insert (NULL,&q, (GlyrMemCache*) 0x1);
    fail_unless (count_db_items (db) == 0, NULL);
    glyr_db_insert (db,NULL, (GlyrMemCache*) 0x1);
    fail_unless (count_db_items (db) == 0, NULL);
    glyr_db_insert (db,&q,NULL);
    fail_unless (count_db_items (db) == 0, NULL);

    glyr_db_insert (db,&q,ct);
    GlyrMemCache * c = glyr_db_lookup (db,&q);
    fail_unless (c != NULL, NULL);
    fail_unless (c->data != NULL, NULL);
    fail_unless (count_db_items (db) == 1, NULL);

    glyr_db_destroy (db);
    glyr_cache_free (ct);
    glyr_query_destroy (&q);
}
Example #2
0
END_TEST

//--------------------

START_TEST (test_db_editplace)
{

    GlyrDatabase * db = setup_db();
    if (db != NULL)
    {
        fail_unless (count_db_items (db) == 0, NULL);

        GlyrMemCache * test_data = glyr_cache_new();
        glyr_cache_set_data (test_data,g_strdup ("my test data"),-1);
        GlyrQuery q;
        setup (&q,GLYR_GET_LYRICS,1);
        glyr_db_insert (db,&q,test_data);

        fail_unless (count_db_items (db) == 1, NULL);

        GlyrMemCache * edit_one = glyr_cache_new();
        glyr_cache_set_data (edit_one,g_strdup ("my new data"),-1);
        glyr_db_edit (db,&q,edit_one);

        fail_unless (count_db_items (db) == 1, NULL);
        GlyrMemCache * lookup_one = glyr_db_lookup (db,&q);
        fail_unless (memcmp (lookup_one->data,edit_one->data,edit_one->size) == 0, NULL);

        GlyrMemCache * edit_two = glyr_cache_new();
        glyr_cache_set_data (edit_two,g_strdup ("my even new data"),-1);
        glyr_db_replace (db,edit_one->md5sum,&q,edit_two);

        fail_unless (count_db_items (db) == 1, NULL);
        GlyrMemCache * lookup_two = glyr_db_lookup (db,&q);
        fail_unless (memcmp (lookup_two->data,edit_two->data,edit_two->size) == 0, NULL);

        glyr_cache_free (lookup_one);
        glyr_cache_free (lookup_two);
        glyr_cache_free (edit_one);
        glyr_cache_free (edit_two);
        glyr_cache_free (test_data);
        glyr_db_destroy (db);
    }
}
Example #3
0
END_TEST

//--------------------

START_TEST (test_sorted_rating)
{
    const int N = 10;

    GlyrDatabase * db = setup_db();

    GlyrQuery q;
    glyr_query_init (&q);
    setup (&q,GLYR_GET_LYRICS,N);

    for (int i = 0; i < N; ++i)
    {
        int rate = (i / 2) + 1;

        GlyrMemCache * ct = glyr_cache_new();
        fail_if (ct == NULL);

        glyr_cache_set_data (ct,g_strdup_printf ("MyLyrics %d",i),-1);
        ct->dsrc = g_strdup ("http://MyLyrics.com");
        ct->rating = rate;
        glyr_db_insert (db,&q,ct);

        glyr_cache_free (ct);
    }

    fail_unless (count_db_items (db) == N);

    GlyrMemCache * list = glyr_db_lookup (db,&q);
    GlyrMemCache * iter = list;
    fail_if (list == NULL);

    double last_timestamp = DBL_MAX;
    int last_rating = INT_MAX;
    while (iter)
    {
        glyr_cache_print (iter);
        fail_unless (last_rating >= iter->rating);
        if (last_rating == iter->rating)
            fail_unless (last_timestamp >= iter->timestamp);

        last_timestamp = iter->timestamp;
        last_rating = iter->rating;
        iter = iter->next;
    }

    glyr_free_list (list);
}
Example #4
0
END_TEST

//--------------------

/* Write artist|album|title, select only artist|title */
START_TEST (test_intelligent_lookup)
{
    GlyrDatabase * db = setup_db();

    GlyrQuery alt;
    glyr_query_init (&alt);

    gchar * artist = "Аркона";
    gchar * album  = "Ot Serdca k Nebu";
    gchar * title  = "Pokrovy Nebesnogo Startsa (Shrouds Of Celestial Sage)";

    glyr_opt_artist (&alt,artist);
    glyr_opt_album (&alt,album );
    glyr_opt_title (&alt,title );
    glyr_opt_type  (&alt,GLYR_GET_LYRICS);

    GlyrMemCache * subject = glyr_cache_new();
    glyr_cache_set_data (subject,g_strdup ("These are lyrics. Really."),-1);

    glyr_db_insert (db,&alt,subject);

    GlyrMemCache * one = glyr_db_lookup (db,&alt);
    fail_if (one == NULL,NULL);
    fail_if (memcmp (one->md5sum,subject->md5sum,16) != 0, NULL);
    glyr_cache_free (one);

    alt.album = NULL;
    GlyrMemCache * two = glyr_db_lookup (db,&alt);
    fail_if (two == NULL,NULL);
    fail_if (memcmp (two->md5sum,subject->md5sum,16) != 0, NULL);
    glyr_cache_free (two);

    fail_unless (count_db_items (db) == 1,NULL);
    int deleted = glyr_db_delete (db,&alt);
    fail_unless (deleted == 1,NULL);
    fail_unless (count_db_items (db) == 0,NULL);

    glyr_query_destroy (&alt);
    glyr_db_destroy (db);
}
Example #5
0
static void file_to_cache(GList **list, GlyrQuery *query, gchar *data, gsize size)
{
    if(list != NULL && data != NULL) {
        GlyrMemCache *item = DL_init();
        glyr_cache_set_data(item, data, size);
        item->type = get_data_type_from_query(query);
        item->dsrc = g_strdup("musictree");
        item->prov = g_strdup("musictree");

        if(TYPE_IS_IMAGE(query->type)) {
            item->img_format = g_strdup("jpeg");
            item->is_image = TRUE;
        } else {
            item->is_image = FALSE;
        }

        *list = g_list_prepend(*list, item);
    }
}
Example #6
0
END_TEST

//--------------------

START_TEST (test_iter_db)
{
    GlyrQuery q;
    setup (&q,GLYR_GET_LYRICS,10);
    glyr_opt_artist (&q,"Equi");
    glyr_opt_title (&q,"lala");

    GlyrDatabase * db = setup_db();

    GlyrQuery nugget;
    setup (&nugget,GLYR_GET_COVERART,40);
    glyr_opt_artist (&nugget,"A very special artist");
    glyr_opt_album (&nugget,"A very special album");

    GTimer * insert_time = g_timer_new();

    const int N = 5000;
    for (int i = 0; i < N; i++)
    {
        GlyrMemCache * ct = glyr_cache_new();
        glyr_cache_set_data (ct,g_strdup_printf ("test# %d",i+1),-1);
        ct->dsrc = g_strdup_printf ("Dummy url %d",i+1);

        if (i % 2)
            ct->rating = N ;
        else
            ct->rating = N ;

        if (i % 23)
            glyr_db_insert (db,&q,ct);
        else
            glyr_db_insert (db,&nugget,ct);

        glyr_cache_free (ct);
    }

    g_timer_stop (insert_time);
    g_message ("Used %.5f seconds to insert..",g_timer_elapsed (insert_time,NULL) );

    /* Check if N items are in DB */
    int cdb = count_db_items (db);
    g_message ("Counted %d items",cdb);
    fail_unless (cdb == N, NULL);

    /* Test if case-insensitivity works */
    glyr_opt_artist (&q,"eQuI");
    glyr_opt_title (&q,"LALA");

    float fine_grained = 0.0;
    GTimer * grain_time = g_timer_new();

    g_timer_start (insert_time);

    GlyrMemCache * c, * ptr;
    for (int i = 1; i <= N/10; i++)
    {
        g_timer_start (grain_time);
        /* Get a list of the caches */
        if (i % 10)
            c = glyr_db_lookup (db,&q);
        else
            c = glyr_db_lookup (db,&nugget);

        g_timer_stop (grain_time);
        fine_grained += g_timer_elapsed (grain_time,NULL);

        ptr = c;
        fail_if (ptr == NULL);

        int last_rating = INT_MAX;
        int ctr = 0;
        while (ptr)
        {
            ctr++;
            fail_unless (last_rating >= ptr->rating);
            last_rating = ptr->rating;
            ptr = ptr->next;
        }
        glyr_free_list (c);

        /* Test if we got exactly 10 or 42 items, (honoring number setting) */

        if (i % 10)
            fail_unless (ctr == 10);
        else
            fail_unless (ctr == 40);
    }


    g_timer_stop (insert_time);
    g_message ("Used %.5f seconds to lookup..",g_timer_elapsed (insert_time,NULL) );
    g_message ("Used %.5f for actual lookup..",fine_grained);

    glyr_db_destroy (db);
    glyr_query_destroy (&q);
    glyr_query_destroy (&nugget);

    g_timer_destroy (insert_time);
    g_timer_destroy (grain_time);
}