Blame tests/gtest/test-cds-last-change-parser.c

Packit 712bc5
/*
Packit 712bc5
 * Copyright (C) 2012 Intel Corporation
Packit 712bc5
 *
Packit 712bc5
 * Author: Jens Georg <jensg@openismus.com>
Packit 712bc5
 *
Packit 712bc5
 * This library is free software; you can redistribute it and/or
Packit 712bc5
 * modify it under the terms of the GNU Library General Public
Packit 712bc5
 * License as published by the Free Software Foundation; either
Packit 712bc5
 * version 2 of the License, or (at your option) any later version.
Packit 712bc5
 *
Packit 712bc5
 * This library is distributed in the hope that it will be useful,
Packit 712bc5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 712bc5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 712bc5
 * Library General Public License for more details.
Packit 712bc5
 *
Packit 712bc5
 * You should have received a copy of the GNU Library General Public
Packit 712bc5
 * License along with this library; if not, write to the
Packit 712bc5
 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Packit 712bc5
 * Boston, MA 02110-1301, USA.
Packit 712bc5
 */
Packit 712bc5
Packit 712bc5
#include <stdio.h>
Packit 712bc5
#include <string.h>
Packit 712bc5
Packit 712bc5
#include <libgupnp-av/gupnp-cds-last-change-parser.h>
Packit 712bc5
Packit 712bc5
typedef struct {
Packit 712bc5
        GUPnPCDSLastChangeEvent event;
Packit 712bc5
        const char *object_id;
Packit 712bc5
        const char *parent_id;
Packit 712bc5
        const char *class;
Packit 712bc5
        guint32 update_id;
Packit 712bc5
        gboolean is_st_update;
Packit 712bc5
} TestReferenceEntry;
Packit 712bc5
Packit 712bc5
typedef struct {
Packit 712bc5
    const char *file_name;
Packit 712bc5
    guint entry_count;
Packit 712bc5
    TestReferenceEntry data[100];
Packit 712bc5
} TestReference;
Packit 712bc5
Packit 712bc5
TestReference test_reference_data[] = {
Packit 712bc5
    {
Packit 712bc5
            "00-cds-last-change.xml",
Packit 712bc5
            0,
Packit 712bc5
            {}
Packit 712bc5
    },
Packit 712bc5
    {
Packit 712bc5
            "01-cds-last-change.xml",
Packit 712bc5
            8,
Packit 712bc5
            {
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "s002",
Packit 712bc5
                            "s001",
Packit 712bc5
                            "object.container.album",
Packit 712bc5
                            213,
Packit 712bc5
                            TRUE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "s001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            214,
Packit 712bc5
                            TRUE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "s003",
Packit 712bc5
                            "s001",
Packit 712bc5
                            "object.item.audioItem",
Packit 712bc5
                            215,
Packit 712bc5
                            FALSE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "s004",
Packit 712bc5
                            "s002",
Packit 712bc5
                            "object.item.audioItem",
Packit 712bc5
                            216,
Packit 712bc5
                            TRUE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_REMOVED,
Packit 712bc5
                            "s003",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            217,
Packit 712bc5
                            FALSE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "s001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            218,
Packit 712bc5
                            FALSE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "s004",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            219,
Packit 712bc5
                            TRUE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_ST_DONE,
Packit 712bc5
                            "s001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            219,
Packit 712bc5
                            FALSE
Packit 712bc5
                    }
Packit 712bc5
            }
Packit 712bc5
    },
Packit 712bc5
    {
Packit 712bc5
            "02-cds-last-change.xml",
Packit 712bc5
            2,
Packit 712bc5
            {
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            "0",
Packit 712bc5
                            "object.container.album.musicAlbum",
Packit 712bc5
                            101,
Packit 712bc5
                            FALSE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "0",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            102,
Packit 712bc5
                            FALSE
Packit 712bc5
                    }
Packit 712bc5
            }
Packit 712bc5
    },
Packit 712bc5
    {
Packit 712bc5
            "03-cds-last-change.xml",
Packit 712bc5
            4,
Packit 712bc5
            {
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            "0",
Packit 712bc5
                            "object.container.album.musicAlbum",
Packit 712bc5
                            101,
Packit 712bc5
                            FALSE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "0",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            102,
Packit 712bc5
                            FALSE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "Song001",
Packit 712bc5
                            "Album001",
Packit 712bc5
                            "object.item.audioItem",
Packit 712bc5
                            103,
Packit 712bc5
                            FALSE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            104,
Packit 712bc5
                            FALSE
Packit 712bc5
                    }
Packit 712bc5
            }
Packit 712bc5
    },
Packit 712bc5
    {
Packit 712bc5
            "04-cds-last-change.xml",
Packit 712bc5
            8,
Packit 712bc5
            {
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            "0",
Packit 712bc5
                            "object.container.album.musicAlbum",
Packit 712bc5
                            101,
Packit 712bc5
                            FALSE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "0",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            102,
Packit 712bc5
                            FALSE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "Song001",
Packit 712bc5
                            "Album001",
Packit 712bc5
                            "object.item.audioItem",
Packit 712bc5
                            103,
Packit 712bc5
                            FALSE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            104,
Packit 712bc5
                            FALSE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "Song002",
Packit 712bc5
                            "Album001",
Packit 712bc5
                            "object.item.audioItem",
Packit 712bc5
                            105,
Packit 712bc5
                            FALSE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            106,
Packit 712bc5
                            FALSE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_REMOVED,
Packit 712bc5
                            "Song001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            107,
Packit 712bc5
                            FALSE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            108,
Packit 712bc5
                            FALSE
Packit 712bc5
                    }
Packit 712bc5
            }
Packit 712bc5
    },
Packit 712bc5
    {
Packit 712bc5
            "05-cds-last-change.xml",
Packit 712bc5
            8,
Packit 712bc5
            {
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            "0",
Packit 712bc5
                            "object.container.album.musicAlbum",
Packit 712bc5
                            101,
Packit 712bc5
                            FALSE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "0",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            102,
Packit 712bc5
                            FALSE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "Song001",
Packit 712bc5
                            "Album001",
Packit 712bc5
                            "object.item.audioItem",
Packit 712bc5
                            103,
Packit 712bc5
                            FALSE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            104,
Packit 712bc5
                            FALSE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "Song002",
Packit 712bc5
                            "Album001",
Packit 712bc5
                            "object.item.audioItem",
Packit 712bc5
                            105,
Packit 712bc5
                            FALSE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            106,
Packit 712bc5
                            FALSE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_REMOVED,
Packit 712bc5
                            "Song001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            107,
Packit 712bc5
                            FALSE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            108,
Packit 712bc5
                            FALSE
Packit 712bc5
                    }
Packit 712bc5
            }
Packit 712bc5
    },
Packit 712bc5
    {
Packit 712bc5
            "06-cds-last-change.xml",
Packit 712bc5
            2,
Packit 712bc5
            {
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "Song003",
Packit 712bc5
                            "Album001",
Packit 712bc5
                            "object.item.audioItem",
Packit 712bc5
                            109,
Packit 712bc5
                            FALSE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            110,
Packit 712bc5
                            FALSE
Packit 712bc5
                    }
Packit 712bc5
            }
Packit 712bc5
    },
Packit 712bc5
    {
Packit 712bc5
            "07-cds-last-change.xml",
Packit 712bc5
            6,
Packit 712bc5
            {
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_ADDED,
Packit 712bc5
                            "Song003",
Packit 712bc5
                            "Album001",
Packit 712bc5
                            "object.item.audioItem",
Packit 712bc5
                            234,
Packit 712bc5
                            TRUE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            235,
Packit 712bc5
                            TRUE
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "Song001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            236,
Packit 712bc5
                            TRUE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_REMOVED,
Packit 712bc5
                            "Song002",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            237,
Packit 712bc5
                            TRUE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_OBJECT_MODIFIED,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            238,
Packit 712bc5
                            TRUE,
Packit 712bc5
                    },
Packit 712bc5
                    {
Packit 712bc5
                            GUPNP_CDS_LAST_CHANGE_EVENT_ST_DONE,
Packit 712bc5
                            "Album001",
Packit 712bc5
                            NULL,
Packit 712bc5
                            NULL,
Packit 712bc5
                            238,
Packit 712bc5
                            FALSE,
Packit 712bc5
                    }
Packit 712bc5
            }
Packit 712bc5
    }
Packit 712bc5
};
Packit 712bc5
Packit 712bc5
static void
Packit 712bc5
compare_entries (const char *file, GList *entries)
Packit 712bc5
{
Packit 712bc5
        guint reference_size, i, j;
Packit 712bc5
        GList *it = entries;
Packit 712bc5
Packit 712bc5
        reference_size = G_N_ELEMENTS (test_reference_data);
Packit 712bc5
Packit 712bc5
        /* Find reference entries */
Packit 712bc5
        for (i = 0; i < reference_size; i++) {
Packit 712bc5
                if (strcmp (test_reference_data[i].file_name, file) != 0)
Packit 712bc5
                        continue;
Packit 712bc5
                g_assert_cmpint (g_list_length (entries),
Packit 712bc5
                                 ==,
Packit 712bc5
                                 test_reference_data[i].entry_count);
Packit 712bc5
                for (j = 0;
Packit 712bc5
                     j < test_reference_data[i].entry_count;
Packit 712bc5
                     j++, it = it->next) {
Packit 712bc5
                        TestReferenceEntry* entry;
Packit 712bc5
                        entry = &test_reference_data[i].data[j];
Packit 712bc5
                        g_assert_cmpstr (entry->class, ==,
Packit 712bc5
                                         gupnp_cds_last_change_entry_get_class (it->data));
Packit 712bc5
                        g_assert_cmpstr (entry->parent_id, ==,
Packit 712bc5
                                         gupnp_cds_last_change_entry_get_parent_id (it->data));
Packit 712bc5
                        g_assert_cmpuint (entry->update_id, ==,
Packit 712bc5
                                          gupnp_cds_last_change_entry_get_update_id (it->data));
Packit 712bc5
                        g_assert_cmpstr (entry->object_id, ==,
Packit 712bc5
                                         gupnp_cds_last_change_entry_get_object_id (it->data));
Packit 712bc5
                        g_assert_cmpint (entry->event, ==,
Packit 712bc5
                                         gupnp_cds_last_change_entry_get_event (it->data));
Packit 712bc5
                        g_assert_cmpint (entry->is_st_update, ==,
Packit 712bc5
                                         gupnp_cds_last_change_entry_is_subtree_update (it->data));
Packit 712bc5
                }
Packit 712bc5
Packit 712bc5
                return;
Packit 712bc5
        }
Packit 712bc5
Packit 712bc5
        g_message ("No reference entry found for file %s", file);
Packit 712bc5
        g_assert_not_reached ();
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
static void
Packit 712bc5
test_parse_spec_samples (void)
Packit 712bc5
{
Packit 712bc5
        GDir *dir;
Packit 712bc5
        GError *error = NULL;
Packit 712bc5
        const char *file;
Packit 712bc5
        char *data_path;
Packit 712bc5
        GUPnPCDSLastChangeParser *parser;
Packit 712bc5
Packit 712bc5
        parser = gupnp_cds_last_change_parser_new ();
Packit 712bc5
        data_path = g_build_filename (DATA_PATH,
Packit 712bc5
                                      "data",
Packit 712bc5
                                      "cds-last-change",
Packit 712bc5
                                      NULL);
Packit 712bc5
Packit 712bc5
        dir = g_dir_open (data_path, 0, &error);
Packit 712bc5
        g_assert_no_error (error);
Packit 712bc5
        while ((file = g_dir_read_name (dir)) != NULL) {
Packit 712bc5
                char *contents;
Packit 712bc5
                gsize length;
Packit 712bc5
                char *file_path;
Packit 712bc5
                GList *entries;
Packit 712bc5
Packit 712bc5
                if (g_str_has_prefix (file, ".") ||
Packit 712bc5
                    g_str_has_suffix (file, "~"))
Packit 712bc5
                        continue;
Packit 712bc5
Packit 712bc5
                file_path = g_build_filename (data_path, file, NULL);
Packit 712bc5
Packit 712bc5
                g_file_get_contents (file_path, &contents, &length, &error);
Packit 712bc5
                g_assert_no_error (error);
Packit 712bc5
                g_free (file_path);
Packit 712bc5
Packit 712bc5
                entries = gupnp_cds_last_change_parser_parse (parser,
Packit 712bc5
                                                              contents,
Packit 712bc5
                                                              &error);
Packit 712bc5
                g_assert_no_error (error);
Packit 712bc5
                compare_entries (file, entries);
Packit 712bc5
                g_list_free_full (entries,
Packit 712bc5
                                  (GDestroyNotify) gupnp_cds_last_change_entry_unref);
Packit 712bc5
                g_free (contents);
Packit 712bc5
        }
Packit 712bc5
Packit 712bc5
        g_object_unref (parser);
Packit 712bc5
        g_dir_close (dir);
Packit 712bc5
        g_free (data_path);
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
int
Packit 712bc5
main (int argc, char *argv[])
Packit 712bc5
{
Packit 712bc5
#if !GLIB_CHECK_VERSION (2, 35, 0)
Packit 712bc5
        g_type_init ();
Packit 712bc5
#endif
Packit 712bc5
        g_test_init (&argc, &argv, NULL);
Packit 712bc5
Packit 712bc5
        g_test_add_func ("/cds-last-change/parse-spec-samples",
Packit 712bc5
                         test_parse_spec_samples);
Packit 712bc5
Packit 712bc5
        return g_test_run ();
Packit 712bc5
}