From 3eb395b71f888ae09751542632fbde5e865c6064 Mon Sep 17 00:00:00 2001 From: Jens Georg Date: Fri, 26 Feb 2016 22:04:41 +0100 Subject: tests: Enable object creator test Signed-off-by: Jens Georg --- tests/Makefile.am | 41 +- tests/object-creator/rygel-dlna-profile.vala | 1 + tests/object-creator/rygel-logical-expression.vala | 1 + tests/object-creator/rygel-m3u-playlist.vala | 1 + tests/object-creator/rygel-object-creator.vala | 1 + .../rygel-relational-expression.vala | 1 + .../rygel-search-criteria-parser.vala | 1 + tests/object-creator/rygel-search-expression.vala | 1 + tests/object-creator/rygel-serializer.vala | 1 + tests/object-creator/rygel-state-machine.vala | 1 + tests/object-creator/test.vala | 514 ++++++++++++++++++++ tests/rygel-data-sink_http-response.vala | 1 - tests/rygel-data-source.vala | 1 - tests/rygel-data-source_http-response.vala | 1 - tests/rygel-dlna-profile.vala | 1 - tests/rygel-http-byte-seek.vala | 1 - tests/rygel-http-byte-seek_http-get.vala | 1 - tests/rygel-http-get.vala | 1 - tests/rygel-http-item-uri.vala | 1 - tests/rygel-http-item-uri_http-get.vala | 1 - tests/rygel-http-item-uri_http-post.vala | 1 - tests/rygel-http-post.vala | 1 - tests/rygel-http-request_http-get.vala | 1 - tests/rygel-http-request_http-post.vala | 1 - tests/rygel-http-response.vala | 1 - tests/rygel-http-seek.vala | 1 - tests/rygel-http-seek_http-get.vala | 1 - tests/rygel-http-seek_object-creator.vala | 1 - tests/rygel-http-seek_time-seek.vala | 1 - tests/rygel-http-time-seek.vala | 1 - tests/rygel-http-time-seek_http-get.vala | 1 - tests/rygel-icon-info.vala | 1 - tests/rygel-logical-expression.vala | 1 - tests/rygel-m3u-playlist_object-creator.vala | 1 - tests/rygel-object-creator-test.vala | 525 --------------------- tests/rygel-object-creator.vala | 1 - tests/rygel-relational-expression.vala | 1 - tests/rygel-search-criteria-parser.vala | 1 - tests/rygel-search-expression.vala | 1 - tests/rygel-searchable-container.vala | 1 - tests/rygel-serializer_object-creator.vala | 1 - tests/rygel-state-machine_http-get.vala | 1 - tests/rygel-state-machine_http-post.vala | 1 - tests/rygel-state-machine_http-response.vala | 1 - tests/rygel-state-machine_object-creator.vala | 1 - tests/rygel-thumbnail.vala | 1 - 46 files changed, 542 insertions(+), 581 deletions(-) create mode 120000 tests/object-creator/rygel-dlna-profile.vala create mode 120000 tests/object-creator/rygel-logical-expression.vala create mode 120000 tests/object-creator/rygel-m3u-playlist.vala create mode 120000 tests/object-creator/rygel-object-creator.vala create mode 120000 tests/object-creator/rygel-relational-expression.vala create mode 120000 tests/object-creator/rygel-search-criteria-parser.vala create mode 120000 tests/object-creator/rygel-search-expression.vala create mode 120000 tests/object-creator/rygel-serializer.vala create mode 120000 tests/object-creator/rygel-state-machine.vala create mode 100644 tests/object-creator/test.vala delete mode 120000 tests/rygel-data-sink_http-response.vala delete mode 120000 tests/rygel-data-source.vala delete mode 120000 tests/rygel-data-source_http-response.vala delete mode 120000 tests/rygel-dlna-profile.vala delete mode 120000 tests/rygel-http-byte-seek.vala delete mode 120000 tests/rygel-http-byte-seek_http-get.vala delete mode 120000 tests/rygel-http-get.vala delete mode 120000 tests/rygel-http-item-uri.vala delete mode 120000 tests/rygel-http-item-uri_http-get.vala delete mode 120000 tests/rygel-http-item-uri_http-post.vala delete mode 120000 tests/rygel-http-post.vala delete mode 120000 tests/rygel-http-request_http-get.vala delete mode 120000 tests/rygel-http-request_http-post.vala delete mode 120000 tests/rygel-http-response.vala delete mode 120000 tests/rygel-http-seek.vala delete mode 120000 tests/rygel-http-seek_http-get.vala delete mode 120000 tests/rygel-http-seek_object-creator.vala delete mode 120000 tests/rygel-http-seek_time-seek.vala delete mode 120000 tests/rygel-http-time-seek.vala delete mode 120000 tests/rygel-http-time-seek_http-get.vala delete mode 120000 tests/rygel-icon-info.vala delete mode 120000 tests/rygel-logical-expression.vala delete mode 120000 tests/rygel-m3u-playlist_object-creator.vala delete mode 100644 tests/rygel-object-creator-test.vala delete mode 120000 tests/rygel-object-creator.vala delete mode 120000 tests/rygel-relational-expression.vala delete mode 120000 tests/rygel-search-criteria-parser.vala delete mode 120000 tests/rygel-search-expression.vala delete mode 120000 tests/rygel-searchable-container.vala delete mode 120000 tests/rygel-serializer_object-creator.vala delete mode 120000 tests/rygel-state-machine_http-get.vala delete mode 120000 tests/rygel-state-machine_http-post.vala delete mode 120000 tests/rygel-state-machine_http-response.vala delete mode 120000 tests/rygel-state-machine_object-creator.vala delete mode 120000 tests/rygel-thumbnail.vala (limited to 'tests') diff --git a/tests/Makefile.am b/tests/Makefile.am index 3bd1167a..7393c90f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -9,13 +9,13 @@ AUTOMAKE_OPTIONS = subdir-objects # rygel-http-get-test \ # rygel-http-post-test \ # rygel-searchable-container-test \ -# rygel-object-creator-test \ # rygel-user-config-test \ # rygel-regression \ # rygel-media-engine-test check_PROGRAMS = rygel-regression \ - rygel-user-config-test + rygel-user-config-test \ + rygel-object-creator-test TESTS = $(check_PROGRAMS) @@ -128,26 +128,23 @@ test_server_libs = \ #rygel_searchable_container_test_LDADD = \ # $(test_libs) # -#rygel_object_creator_test_SOURCES = rygel-object-creator-test.vala \ -# rygel-object-creator.vala \ -# rygel-data-source.vala \ -# rygel-dlna-profile.vala \ -# rygel-http-seek_object-creator.vala \ -# rygel-state-machine_object-creator.vala \ -# rygel-relational-expression.vala \ -# rygel-logical-expression.vala \ -# rygel-search-expression.vala \ -# rygel-search-criteria-parser.vala \ -# rygel-serializer_object-creator.vala \ -# rygel-m3u-playlist_object-creator.vala -#rygel_object_creator_test_VALAFLAGS = \ -# $(test_valaflags) \ -# --pkg uuid -#rygel_object_creator_test_CFLAGS = \ -# $(test_cflags) -#rygel_object_creator_test_LDADD = \ -# $(test_libs) -# +rygel_object_creator_test_SOURCES = object-creator/test.vala \ + object-creator/rygel-object-creator.vala \ + object-creator/rygel-dlna-profile.vala \ + object-creator/rygel-serializer.vala \ + object-creator/rygel-m3u-playlist.vala \ + object-creator/rygel-state-machine.vala \ + object-creator/rygel-search-expression.vala \ + object-creator/rygel-relational-expression.vala \ + object-creator/rygel-logical-expression.vala \ + object-creator/rygel-search-criteria-parser.vala +rygel_object_creator_test_VALAFLAGS = \ + $(test_valaflags) +rygel_object_creator_test_CFLAGS = \ + $(test_cflags) +rygel_object_creator_test_LDADD = \ + $(test_libs) + rygel_user_config_test_SOURCES = rygel-configuration.vala \ rygel-user-config.vala \ rygel-user-config-test.vala diff --git a/tests/object-creator/rygel-dlna-profile.vala b/tests/object-creator/rygel-dlna-profile.vala new file mode 120000 index 00000000..59afe74f --- /dev/null +++ b/tests/object-creator/rygel-dlna-profile.vala @@ -0,0 +1 @@ +../../src/librygel-core/rygel-dlna-profile.vala \ No newline at end of file diff --git a/tests/object-creator/rygel-logical-expression.vala b/tests/object-creator/rygel-logical-expression.vala new file mode 120000 index 00000000..a8442a8a --- /dev/null +++ b/tests/object-creator/rygel-logical-expression.vala @@ -0,0 +1 @@ +../../src/librygel-server/rygel-logical-expression.vala \ No newline at end of file diff --git a/tests/object-creator/rygel-m3u-playlist.vala b/tests/object-creator/rygel-m3u-playlist.vala new file mode 120000 index 00000000..ff1932a2 --- /dev/null +++ b/tests/object-creator/rygel-m3u-playlist.vala @@ -0,0 +1 @@ +../../src/librygel-server/rygel-m3u-playlist.vala \ No newline at end of file diff --git a/tests/object-creator/rygel-object-creator.vala b/tests/object-creator/rygel-object-creator.vala new file mode 120000 index 00000000..0d8e028f --- /dev/null +++ b/tests/object-creator/rygel-object-creator.vala @@ -0,0 +1 @@ +../../src/librygel-server/rygel-object-creator.vala \ No newline at end of file diff --git a/tests/object-creator/rygel-relational-expression.vala b/tests/object-creator/rygel-relational-expression.vala new file mode 120000 index 00000000..542d7165 --- /dev/null +++ b/tests/object-creator/rygel-relational-expression.vala @@ -0,0 +1 @@ +../../src/librygel-server/rygel-relational-expression.vala \ No newline at end of file diff --git a/tests/object-creator/rygel-search-criteria-parser.vala b/tests/object-creator/rygel-search-criteria-parser.vala new file mode 120000 index 00000000..f94f2126 --- /dev/null +++ b/tests/object-creator/rygel-search-criteria-parser.vala @@ -0,0 +1 @@ +../../src/librygel-server/rygel-search-criteria-parser.vala \ No newline at end of file diff --git a/tests/object-creator/rygel-search-expression.vala b/tests/object-creator/rygel-search-expression.vala new file mode 120000 index 00000000..5d005ff7 --- /dev/null +++ b/tests/object-creator/rygel-search-expression.vala @@ -0,0 +1 @@ +../../src/librygel-server/rygel-search-expression.vala \ No newline at end of file diff --git a/tests/object-creator/rygel-serializer.vala b/tests/object-creator/rygel-serializer.vala new file mode 120000 index 00000000..272b6813 --- /dev/null +++ b/tests/object-creator/rygel-serializer.vala @@ -0,0 +1 @@ +../../src/librygel-server/rygel-serializer.vala \ No newline at end of file diff --git a/tests/object-creator/rygel-state-machine.vala b/tests/object-creator/rygel-state-machine.vala new file mode 120000 index 00000000..e881e9f6 --- /dev/null +++ b/tests/object-creator/rygel-state-machine.vala @@ -0,0 +1 @@ +../../src/librygel-core/rygel-state-machine.vala \ No newline at end of file diff --git a/tests/object-creator/test.vala b/tests/object-creator/test.vala new file mode 100644 index 00000000..a0198d84 --- /dev/null +++ b/tests/object-creator/test.vala @@ -0,0 +1,514 @@ +/* + * Copyright (C) 2012 Nokia Corporation. + * Copyright (C) 2012 Intel Corporation. + * + * Author: Jens Georg + * + * This file is part of Rygel. + * + * Rygel is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * Rygel is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +public const string DIDL_ITEM = """ + + + New Song + object.item.audioItem + + +"""; + +public class Rygel.ServiceAction : GLib.Object { + public int error_code; + public string error_message; + public string id; + public string elements; + + public ServiceAction (string? container_id, + string? elements) { + this.id = container_id; + this.elements = elements; + } + + public void @return() {} + public void return_error (int code, string message) { + this.error_code = code; + this.error_message = message; + } + + public new void @get (string arg1_name, + Type arg1_type, + out string arg1_val, + string arg2_name, + Type arg2_type, + out string arg2_val) { + assert (arg1_name == "ContainerID"); + assert (arg1_type == typeof (string)); + arg1_val = id; + + assert (arg2_name == "Elements"); + assert (arg2_type == typeof (string)); + arg2_val = elements; + } + + public new void @set (string arg1_name, + Type arg1_type, + string arg1_val, + string arg2_name, + Type arg2_type, + string arg2_val) { + assert (arg1_name == "ObjectID"); + assert (arg1_type == typeof (string)); + + assert (arg2_name == "Result"); + assert (arg2_type == typeof (string)); + } +} + +public class Rygel.HTTPServer : GLib.Object { +} + +public class Rygel.ObjectRemovalQueue : GLib.Object { + public static ObjectRemovalQueue get_default () { + return new ObjectRemovalQueue (); + } + + public void queue (MediaObject object, Cancellable? cancellable) { + } +} + +public class Rygel.MediaServerPlugin : GLib.Object { + public GLib.List upload_profiles = new GLib.List + (); +} + +public class Rygel.MediaObject : GLib.Object { + public string id {get; set; } + public string ref_id; + public unowned MediaContainer parent { get; set; } + public string upnp_class; + public string title { get; set; } + public GUPnP.OCMFlags ocm_flags; + public Gee.ArrayList uris; + public uint object_update_id; + + public void add_uri (string uri) { + this.uris.add (uri); + } + + public Gee.ArrayList get_uris () { return this.uris; } + + public string get_primary_uri () { return this.uris[0]; } + + internal void serialize (Rygel.Serializer serializer, HTTPServer server) { + } + + public void apply_didl_lite (GUPnP.DIDLLiteObject object) { + } + + public virtual async MediaObjects? get_children + (uint offset, + uint max_count, + string sort_criteria, + Cancellable? cancellable) + throws Error { + return null; + } + + public virtual async MediaObject? find_object (string id, + Cancellable? cancellable) + throws Error { + return null; + } +} + +public interface Rygel.TrackableContainer : Rygel.MediaContainer { +} + +public interface Rygel.TrackableItem : Rygel.MediaItem { +} + +public class Rygel.MediaItem : Rygel.MediaObject { +} + +public class Rygel.MediaFileItem : Rygel.MediaItem { + public string dlna_profile; + public string mime_type; + public long size; + public bool place_holder; + public string date; + + public MediaFileItem (string id, MediaContainer parent, string title) { + this.id = id; + this.parent = parent; + this.title = title; + } + +} + +public class Rygel.MusicItem : Rygel.AudioItem { + public new const string UPNP_CLASS = "object.item.audioItem.musicTrack"; + + public MusicItem (string id, MediaContainer parent, string title) { + base (id, parent, title); + } +} + +public class Rygel.AudioItem : Rygel.MediaFileItem { + public const string UPNP_CLASS = "object.item.audioItem"; + public string artist; + public string album; + + public AudioItem (string id, MediaContainer parent, string title) { + base (id, parent, title); + } +} +public class Rygel.ImageItem : Rygel.MediaFileItem { + public new const string UPNP_CLASS = "object.item.imageItem"; + public ImageItem (string id, MediaContainer parent, string title) { + base (id, parent, title); + } +} + +public class Rygel.VideoItem : Rygel.MediaFileItem { + public const string UPNP_CLASS = "object.item.videoItem"; + public VideoItem (string id, MediaContainer parent, string title) { + base (id, parent, title); + } +} + +public class Rygel.PhotoItem : Rygel.MediaFileItem { + public const string UPNP_CLASS = "object.item.imageItem.photo"; + public string creator; + + public PhotoItem (string id, MediaContainer parent, string title) { + base (id, parent, title); + } +} + +public class Rygel.PlaylistItem : Rygel.MediaFileItem { + public const string UPNP_CLASS = "object.item.playlistItem"; + + public PlaylistItem (string id, MediaContainer parent, string title) { + base (id, parent, title); + } +} + +public class Rygel.RootDevice : GLib.Object { + public MediaServerPlugin resource_factory; + + public RootDevice () { + this.resource_factory = new MediaServerPlugin (); + } +} + +public class Rygel.ContentDirectory : GLib.Object { + public Cancellable cancellable; + public MediaContainer root_container; + public HTTPServer http_server; + public RootDevice root_device; + + public ContentDirectory () { + this.root_device = new RootDevice (); + } +} + +public class Rygel.MediaContainer : Rygel.MediaObject { + public Gee.ArrayList create_classes = new Gee.ArrayList (); + public int child_count { get; set; } + public string sort_criteria = "+dc:title"; + public static const string ANY = "DLNA.ORG_AnyContainer"; + public static const string UPNP_CLASS = "object.container"; + public static const string STORAGE_FOLDER = + "object.container.storageFolder"; + public static const string PLAYLIST = + "object.container.playlistContainer"; + public uint update_id; + + // mockable elements + public MediaObject found_object = null; + + public override async MediaObject? find_object (string id, + Cancellable? cancellable = null) + throws Error { + Idle.add (() => { find_object.callback (); return false; }); + yield; + + return found_object; + } + + public signal void container_updated (MediaContainer container); +} + +public class Rygel.MediaObjects : Gee.ArrayList { +} + +public class Rygel.WritableContainer : Rygel.MediaContainer { + public bool can_create (string upnp_class) { + return this.create_classes.contains (upnp_class); + } + + public async File? get_writable (Cancellable? cancellable = null) { + return File.new_for_commandline_arg ("/tmp"); + } + + public async void add_item (MediaItem item, + Cancellable? cancellable = null) { + } + + public async void add_container (MediaContainer container, Cancellable? + cancellable = null) { } +} + +public class Rygel.SearchableContainer : Rygel.MediaContainer { + public MediaObjects result = new MediaObjects (); + + public async MediaObjects search (SearchExpression expression, + int offset, + int count, + out int total_matches, + string soer_criteria, + Cancellable? cancellable = null) { + total_matches = 0; + Idle.add (() => { search.callback (); return false; }); + yield; + + return result; + } +} + +public errordomain Rygel.ContentDirectoryError { + BAD_METADATA, + NO_SUCH_OBJECT, + NO_SUCH_CONTAINER, + INVALID_ARGS, + RESTRICTED_PARENT, + ERROR +} + +public class Rygel.Transcoder { +} + +public static void log_func (string? domain, + LogLevelFlags flags, + string message) { + + // Ignore critical of gee 0.6 and recent glib + if (message.has_prefix ("Read-only property 'read-only-view' on class")) { + Log.default_handler (domain, flags, message); + + return; + } + + if (LogLevelFlags.LEVEL_CRITICAL in flags || + LogLevelFlags.LEVEL_ERROR in flags || + LogLevelFlags.FLAG_FATAL in flags) { + print ("======> FAILED: %s: %s\n", domain ?? "", message); + assert_not_reached (); + } +} + +public class Rygel.HTTPObjectCreatorTest : GLib.Object { + + public static int main (string[] args) { + Log.set_default_handler (log_func); + var test = new HTTPObjectCreatorTest (); + test.test_parse_args (); + test.test_didl_parsing (); + test.test_fetch_container (); + + /* This is just here to avoid warnings about unused methods: */ + var serializer = new Serializer (SerializerType.GENERIC_DIDL); + serializer.add_item (); + serializer.add_container (); + serializer.filter ("something"); + + return 0; + } + + // expected errors + Error no_such_object; + Error no_such_container; + Error restricted_parent; + Error bad_metadata; + Error invalid_args; + + public HTTPObjectCreatorTest () { + this.no_such_object = new ContentDirectoryError.NO_SUCH_OBJECT(""); + this.no_such_container = new ContentDirectoryError.NO_SUCH_CONTAINER(""); + this.restricted_parent = new ContentDirectoryError.RESTRICTED_PARENT(""); + this.bad_metadata = new ContentDirectoryError.BAD_METADATA(""); + this.invalid_args = new ContentDirectoryError.INVALID_ARGS(""); + } + + private void test_parse_args () { + // check null container id + var content_directory = new ContentDirectory (); + + var action = new ServiceAction (null, ""); + var creator = new ObjectCreator (content_directory, action); + creator.run.begin (); + assert (action.error_code == invalid_args.code); + + // check elements containing a comment + action = new ServiceAction ("0", ""); + creator = new ObjectCreator (content_directory, action); + creator.run.begin (); + assert (action.error_code == bad_metadata.code); + + // check null elements + action = new ServiceAction ("0", null); + creator = new ObjectCreator (content_directory, action); + creator.run.begin (); + assert (action.error_code == bad_metadata.code); + } + + private void test_didl_parsing_step (Xml.Doc *doc, int expected_code) { + string xml; + + doc->dump_memory_enc (out xml); + var action = new ServiceAction ("0", xml); + var content_directory = new ContentDirectory (); + var creator = new ObjectCreator (content_directory, action); + creator.run.begin (); + assert (action.error_code == expected_code); + } + + private void test_didl_parsing () { + var xml = Xml.Parser.read_memory (DIDL_ITEM, + DIDL_ITEM.length, + null, + null, + Xml.ParserOption.RECOVER | + Xml.ParserOption.NOBLANKS); + var didl_node = xml->children; + var item_node = didl_node->children; + var content_directory = new ContentDirectory (); + + // test no DIDL + var action = new ServiceAction ("0", ""); + var creator = new ObjectCreator (content_directory, action); + creator.run.begin (); + assert (action.error_code == bad_metadata.code); + assert (action.error_message == "Bad metadata"); + + // test empty DIDL + item_node->unlink (); + didl_node->set_content (" "); + this.test_didl_parsing_step (xml, bad_metadata.code); + + // test item node with missing restricted attribute + var tmp = item_node->copy (1); + tmp->unset_prop ("restricted"); + didl_node->add_child (tmp); + this.test_didl_parsing_step (xml, bad_metadata.code); + + // test item node with restricted=1 + tmp->set_prop ("restricted", "1"); + this.test_didl_parsing_step (xml, bad_metadata.code); + + // test item node with invalid id + tmp->unlink (); + tmp = item_node->copy (1); + tmp->set_prop ("id", "InvalidItemId"); + didl_node->add_child (tmp); + this.test_didl_parsing_step (xml, bad_metadata.code); + + // test item node with missing id + tmp->unset_prop ("id"); + this.test_didl_parsing_step (xml, bad_metadata.code); + + // test item node with missing title + tmp->unlink (); + tmp = item_node->copy (1); + var title_node = tmp->children; + title_node->unlink (); + didl_node->add_child (tmp); + this.test_didl_parsing_step (xml, bad_metadata.code); + + // test missing or empty upnp class + tmp->unlink (); + tmp = item_node->copy (1); + var class_node = tmp->children->next; + + class_node->set_content (""); + this.test_didl_parsing_step (xml, bad_metadata.code); + + class_node->unlink (); + this.test_didl_parsing_step (xml, bad_metadata.code); + } + + private void test_fetch_container_run (ObjectCreator creator) { + var main_loop = new MainLoop (null, false); + creator.run.begin ( () => { main_loop.quit (); }); + main_loop.run (); + } + + private void test_fetch_container () { + // check case when object is not found + var content_directory = new ContentDirectory (); + var root_container = new SearchableContainer (); + content_directory.root_container = root_container; + var action = new ServiceAction ("0", DIDL_ITEM); + var creator = new ObjectCreator (content_directory, action); + this.test_fetch_container_run (creator); + assert (action.error_code == no_such_container.code); + + // check case when found object is not a container → Error 710 + // cf. ContentDirectory:2 spec, Table 2-22 + root_container.found_object = new MediaObject (); + this.test_fetch_container_run (creator); + assert (action.error_code == no_such_container.code); + + // check case when found container does not have OCMUpload set + root_container.found_object = new MediaContainer (); + this.test_fetch_container_run (creator); + assert (action.error_code == restricted_parent.code); + + // check case when found container is not a writable container + root_container.found_object.ocm_flags |= GUPnP.OCMFlags.UPLOAD; + this.test_fetch_container_run (creator); + assert (action.error_code == restricted_parent.code); + + // check when found container does not have the correct create class + var container = new WritableContainer (); + container.create_classes.add ("object.item.imageItem.musicTrack"); + container.ocm_flags |= GUPnP.OCMFlags.UPLOAD; + root_container.found_object = container; + this.test_fetch_container_run (creator); + assert (action.error_code == bad_metadata.code); + + // check DLNA.ORG_AnyContainer when root container is not searchable + content_directory.root_container = new MediaContainer (); + action.id = "DLNA.ORG_AnyContainer"; + this.test_fetch_container_run (creator); + assert (action.error_code == no_such_container.code); + + // check DLNA.ORG_AnyContainer when no writable container is found + content_directory.root_container = new SearchableContainer (); + this.test_fetch_container_run (creator); + // We cannot distinguish this case from the "create-class doesn't match" + // case + assert (action.error_code == bad_metadata.code); + } +} diff --git a/tests/rygel-data-sink_http-response.vala b/tests/rygel-data-sink_http-response.vala deleted file mode 120000 index 1fcf09b6..00000000 --- a/tests/rygel-data-sink_http-response.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-data-sink.vala \ No newline at end of file diff --git a/tests/rygel-data-source.vala b/tests/rygel-data-source.vala deleted file mode 120000 index e1065ed1..00000000 --- a/tests/rygel-data-source.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-data-source.vala \ No newline at end of file diff --git a/tests/rygel-data-source_http-response.vala b/tests/rygel-data-source_http-response.vala deleted file mode 120000 index e1065ed1..00000000 --- a/tests/rygel-data-source_http-response.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-data-source.vala \ No newline at end of file diff --git a/tests/rygel-dlna-profile.vala b/tests/rygel-dlna-profile.vala deleted file mode 120000 index 8fa6cea2..00000000 --- a/tests/rygel-dlna-profile.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-core/rygel-dlna-profile.vala \ No newline at end of file diff --git a/tests/rygel-http-byte-seek.vala b/tests/rygel-http-byte-seek.vala deleted file mode 120000 index 84e6fe96..00000000 --- a/tests/rygel-http-byte-seek.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-byte-seek.vala \ No newline at end of file diff --git a/tests/rygel-http-byte-seek_http-get.vala b/tests/rygel-http-byte-seek_http-get.vala deleted file mode 120000 index 84e6fe96..00000000 --- a/tests/rygel-http-byte-seek_http-get.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-byte-seek.vala \ No newline at end of file diff --git a/tests/rygel-http-get.vala b/tests/rygel-http-get.vala deleted file mode 120000 index e4bac4e8..00000000 --- a/tests/rygel-http-get.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-get.vala \ No newline at end of file diff --git a/tests/rygel-http-item-uri.vala b/tests/rygel-http-item-uri.vala deleted file mode 120000 index b82155c2..00000000 --- a/tests/rygel-http-item-uri.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-item-uri.vala \ No newline at end of file diff --git a/tests/rygel-http-item-uri_http-get.vala b/tests/rygel-http-item-uri_http-get.vala deleted file mode 120000 index b82155c2..00000000 --- a/tests/rygel-http-item-uri_http-get.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-item-uri.vala \ No newline at end of file diff --git a/tests/rygel-http-item-uri_http-post.vala b/tests/rygel-http-item-uri_http-post.vala deleted file mode 120000 index b82155c2..00000000 --- a/tests/rygel-http-item-uri_http-post.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-item-uri.vala \ No newline at end of file diff --git a/tests/rygel-http-post.vala b/tests/rygel-http-post.vala deleted file mode 120000 index 80bea5f1..00000000 --- a/tests/rygel-http-post.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-post.vala \ No newline at end of file diff --git a/tests/rygel-http-request_http-get.vala b/tests/rygel-http-request_http-get.vala deleted file mode 120000 index 60d2e75e..00000000 --- a/tests/rygel-http-request_http-get.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-request.vala \ No newline at end of file diff --git a/tests/rygel-http-request_http-post.vala b/tests/rygel-http-request_http-post.vala deleted file mode 120000 index 60d2e75e..00000000 --- a/tests/rygel-http-request_http-post.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-request.vala \ No newline at end of file diff --git a/tests/rygel-http-response.vala b/tests/rygel-http-response.vala deleted file mode 120000 index 7e6c2d5a..00000000 --- a/tests/rygel-http-response.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-response.vala \ No newline at end of file diff --git a/tests/rygel-http-seek.vala b/tests/rygel-http-seek.vala deleted file mode 120000 index 33966006..00000000 --- a/tests/rygel-http-seek.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-seek.vala \ No newline at end of file diff --git a/tests/rygel-http-seek_http-get.vala b/tests/rygel-http-seek_http-get.vala deleted file mode 120000 index 33966006..00000000 --- a/tests/rygel-http-seek_http-get.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-seek.vala \ No newline at end of file diff --git a/tests/rygel-http-seek_object-creator.vala b/tests/rygel-http-seek_object-creator.vala deleted file mode 120000 index 33966006..00000000 --- a/tests/rygel-http-seek_object-creator.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-seek.vala \ No newline at end of file diff --git a/tests/rygel-http-seek_time-seek.vala b/tests/rygel-http-seek_time-seek.vala deleted file mode 120000 index 33966006..00000000 --- a/tests/rygel-http-seek_time-seek.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-seek.vala \ No newline at end of file diff --git a/tests/rygel-http-time-seek.vala b/tests/rygel-http-time-seek.vala deleted file mode 120000 index 7ea8eb48..00000000 --- a/tests/rygel-http-time-seek.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-time-seek.vala \ No newline at end of file diff --git a/tests/rygel-http-time-seek_http-get.vala b/tests/rygel-http-time-seek_http-get.vala deleted file mode 120000 index 7ea8eb48..00000000 --- a/tests/rygel-http-time-seek_http-get.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-http-time-seek.vala \ No newline at end of file diff --git a/tests/rygel-icon-info.vala b/tests/rygel-icon-info.vala deleted file mode 120000 index 84f4417d..00000000 --- a/tests/rygel-icon-info.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-core/rygel-icon-info.vala \ No newline at end of file diff --git a/tests/rygel-logical-expression.vala b/tests/rygel-logical-expression.vala deleted file mode 120000 index 0a0e8547..00000000 --- a/tests/rygel-logical-expression.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-logical-expression.vala \ No newline at end of file diff --git a/tests/rygel-m3u-playlist_object-creator.vala b/tests/rygel-m3u-playlist_object-creator.vala deleted file mode 120000 index 7b257a37..00000000 --- a/tests/rygel-m3u-playlist_object-creator.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-m3u-playlist.vala \ No newline at end of file diff --git a/tests/rygel-object-creator-test.vala b/tests/rygel-object-creator-test.vala deleted file mode 100644 index 69aad3f6..00000000 --- a/tests/rygel-object-creator-test.vala +++ /dev/null @@ -1,525 +0,0 @@ -/* - * Copyright (C) 2012 Nokia Corporation. - * Copyright (C) 2012 Intel Corporation. - * - * Author: Jens Georg - * - * This file is part of Rygel. - * - * Rygel is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * Rygel is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/* This is not used. -[CCode (cname = "uuid_generate", cheader_filename = "uuid/uuid.h")] -internal extern static void uuid_generate ([CCode (array_length = false)] - uchar[] uuid); -[CCode (cname = "uuid_unparse", cheader_filename = "uuid/uuid.h")] -internal extern static void uuid_unparse ([CCode (array_length = false)] - uchar[] uuid, - [CCode (array_length = false)] - uchar[] output); -*/ - -public const string DIDL_ITEM = """ - - - New Song - object.item.audioItem - - -"""; - -public class Rygel.ServiceAction : GLib.Object { - public int error_code; - public string error_message; - public string id; - public string elements; - - public ServiceAction (string? container_id, - string? elements) { - this.id = container_id; - this.elements = elements; - } - - public void @return() {} - public void return_error (int code, string message) { - this.error_code = code; - this.error_message = message; - } - - public new void @get (string arg1_name, - Type arg1_type, - out string arg1_val, - string arg2_name, - Type arg2_type, - out string arg2_val) { - assert (arg1_name == "ContainerID"); - assert (arg1_type == typeof (string)); - arg1_val = id; - - assert (arg2_name == "Elements"); - assert (arg2_type == typeof (string)); - arg2_val = elements; - } - - public new void @set (string arg1_name, - Type arg1_type, - string arg1_val, - string arg2_name, - Type arg2_type, - string arg2_val) { - assert (arg1_name == "ObjectID"); - assert (arg1_type == typeof (string)); - - assert (arg2_name == "Result"); - assert (arg2_type == typeof (string)); - } -} - -public class Rygel.HTTPServer : GLib.Object { -} - -public class Rygel.ObjectRemovalQueue : GLib.Object { - public static ObjectRemovalQueue get_default () { - return new ObjectRemovalQueue (); - } - - public void queue (MediaObject object, Cancellable? cancellable) { - } -} - -public class Rygel.MediaServerPlugin : GLib.Object { - public GLib.List upload_profiles = new GLib.List - (); -} - -public class Rygel.MediaObject : GLib.Object { - public string id {get; set; } - public string ref_id; - public unowned MediaContainer parent { get; set; } - public string upnp_class; - public string title { get; set; } - public GUPnP.OCMFlags ocm_flags; - public Gee.ArrayList uris; - public uint object_update_id; - - public void add_uri (string uri) { - this.uris.add (uri); - } - - public Gee.ArrayList get_uris () { return this.uris; } - - public string get_primary_uri () { return this.uris[0]; } - - internal void serialize (Rygel.Serializer serializer, HTTPServer server) { - } - - public void apply_didl_lite (GUPnP.DIDLLiteObject object) { - } - - public virtual async MediaObjects? get_children - (uint offset, - uint max_count, - string sort_criteria, - Cancellable? cancellable) - throws Error { - return null; - } - - public virtual async MediaObject? find_object (string id, - Cancellable? cancellable) - throws Error { - return null; - } -} - -public interface Rygel.TrackableContainer : Rygel.MediaContainer { -} - -public interface Rygel.TrackableItem : Rygel.MediaItem { -} - -public class Rygel.MediaItem : Rygel.MediaObject { -} - -public class Rygel.MediaFileItem : Rygel.MediaItem { - public string dlna_profile; - public string mime_type; - public long size; - public bool place_holder; - public string date; - - public MediaFileItem (string id, MediaContainer parent, string title) { - this.id = id; - this.parent = parent; - this.title = title; - } - -} - -public class Rygel.MusicItem : Rygel.AudioItem { - public new const string UPNP_CLASS = "object.item.audioItem.musicTrack"; - - public MusicItem (string id, MediaContainer parent, string title) { - base (id, parent, title); - } -} - -public class Rygel.AudioItem : Rygel.MediaFileItem { - public const string UPNP_CLASS = "object.item.audioItem"; - public string artist; - public string album; - - public AudioItem (string id, MediaContainer parent, string title) { - base (id, parent, title); - } -} -public class Rygel.ImageItem : Rygel.MediaFileItem { - public new const string UPNP_CLASS = "object.item.imageItem"; - public ImageItem (string id, MediaContainer parent, string title) { - base (id, parent, title); - } -} - -public class Rygel.VideoItem : Rygel.MediaFileItem { - public const string UPNP_CLASS = "object.item.videoItem"; - public VideoItem (string id, MediaContainer parent, string title) { - base (id, parent, title); - } -} - -public class Rygel.PhotoItem : Rygel.MediaFileItem { - public const string UPNP_CLASS = "object.item.imageItem.photo"; - public string creator; - - public PhotoItem (string id, MediaContainer parent, string title) { - base (id, parent, title); - } -} - -public class Rygel.PlaylistItem : Rygel.MediaFileItem { - public const string UPNP_CLASS = "object.item.playlistItem"; - - public PlaylistItem (string id, MediaContainer parent, string title) { - base (id, parent, title); - } -} - -public class Rygel.RootDevice : GLib.Object { - public MediaServerPlugin resource_factory; - - public RootDevice () { - this.resource_factory = new MediaServerPlugin (); - } -} - -public class Rygel.ContentDirectory : GLib.Object { - public Cancellable cancellable; - public MediaContainer root_container; - public HTTPServer http_server; - public RootDevice root_device; - - public ContentDirectory () { - this.root_device = new RootDevice (); - } -} - -public class Rygel.MediaContainer : Rygel.MediaObject { - public Gee.ArrayList create_classes = new Gee.ArrayList (); - public int child_count { get; set; } - public string sort_criteria = "+dc:title"; - public static const string ANY = "DLNA.ORG_AnyContainer"; - public static const string UPNP_CLASS = "object.container"; - public static const string STORAGE_FOLDER = - "object.container.storageFolder"; - public static const string PLAYLIST = - "object.container.playlistContainer"; - public uint update_id; - - // mockable elements - public MediaObject found_object = null; - - public override async MediaObject? find_object (string id, - Cancellable? cancellable = null) - throws Error { - Idle.add (() => { find_object.callback (); return false; }); - yield; - - return found_object; - } - - public signal void container_updated (MediaContainer container); -} - -public class Rygel.MediaObjects : Gee.ArrayList { -} - -public class Rygel.WritableContainer : Rygel.MediaContainer { - public bool can_create (string upnp_class) { - return this.create_classes.contains (upnp_class); - } - - public async File? get_writable (Cancellable? cancellable = null) { - return File.new_for_commandline_arg ("/tmp"); - } - - public async void add_item (MediaItem item, - Cancellable? cancellable = null) { - } - - public async void add_container (MediaContainer container, Cancellable? - cancellable = null) { } -} - -public class Rygel.SearchableContainer : Rygel.MediaContainer { - public MediaObjects result = new MediaObjects (); - - public async MediaObjects search (SearchExpression expression, - int offset, - int count, - out int total_matches, - string soer_criteria, - Cancellable? cancellable = null) { - total_matches = 0; - Idle.add (() => { search.callback (); return false; }); - yield; - - return result; - } -} - -public errordomain Rygel.ContentDirectoryError { - BAD_METADATA, - NO_SUCH_OBJECT, - NO_SUCH_CONTAINER, - INVALID_ARGS, - RESTRICTED_PARENT, - ERROR -} - -public class Rygel.Transcoder { -} - -public static void log_func (string? domain, - LogLevelFlags flags, - string message) { - - // Ignore critical of gee 0.6 and recent glib - if (message.has_prefix ("Read-only property 'read-only-view' on class")) { - Log.default_handler (domain, flags, message); - - return; - } - - if (LogLevelFlags.LEVEL_CRITICAL in flags || - LogLevelFlags.LEVEL_ERROR in flags || - LogLevelFlags.FLAG_FATAL in flags) { - print ("======> FAILED: %s: %s\n", domain ?? "", message); - assert_not_reached (); - } -} - -public class Rygel.HTTPObjectCreatorTest : GLib.Object { - - public static int main (string[] args) { - Log.set_default_handler (log_func); - var test = new HTTPObjectCreatorTest (); - test.test_parse_args (); - test.test_didl_parsing (); - test.test_fetch_container (); - - /* This is just here to avoid warnings about unused methods: */ - var serializer = new Serializer (SerializerType.GENERIC_DIDL); - serializer.add_item (); - serializer.add_container (); - serializer.filter ("something"); - - return 0; - } - - // expected errors - Error no_such_object; - Error no_such_container; - Error restricted_parent; - Error bad_metadata; - Error invalid_args; - - public HTTPObjectCreatorTest () { - this.no_such_object = new ContentDirectoryError.NO_SUCH_OBJECT(""); - this.no_such_container = new ContentDirectoryError.NO_SUCH_CONTAINER(""); - this.restricted_parent = new ContentDirectoryError.RESTRICTED_PARENT(""); - this.bad_metadata = new ContentDirectoryError.BAD_METADATA(""); - this.invalid_args = new ContentDirectoryError.INVALID_ARGS(""); - } - - private void test_parse_args () { - // check null container id - var content_directory = new ContentDirectory (); - - var action = new ServiceAction (null, ""); - var creator = new ObjectCreator (content_directory, action); - creator.run.begin (); - assert (action.error_code == invalid_args.code); - - // check elements containing a comment - action = new ServiceAction ("0", ""); - creator = new ObjectCreator (content_directory, action); - creator.run.begin (); - assert (action.error_code == bad_metadata.code); - - // check null elements - action = new ServiceAction ("0", null); - creator = new ObjectCreator (content_directory, action); - creator.run.begin (); - assert (action.error_code == bad_metadata.code); - } - - private void test_didl_parsing_step (Xml.Doc *doc, int expected_code) { - string xml; - - doc->dump_memory_enc (out xml); - var action = new ServiceAction ("0", xml); - var content_directory = new ContentDirectory (); - var creator = new ObjectCreator (content_directory, action); - creator.run.begin (); - assert (action.error_code == expected_code); - } - - private void test_didl_parsing () { - var xml = Xml.Parser.read_memory (DIDL_ITEM, - DIDL_ITEM.length, - null, - null, - Xml.ParserOption.RECOVER | - Xml.ParserOption.NOBLANKS); - var didl_node = xml->children; - var item_node = didl_node->children; - var content_directory = new ContentDirectory (); - - // test no DIDL - var action = new ServiceAction ("0", ""); - var creator = new ObjectCreator (content_directory, action); - creator.run.begin (); - assert (action.error_code == bad_metadata.code); - assert (action.error_message == "Bad metadata"); - - // test empty DIDL - item_node->unlink (); - didl_node->set_content (" "); - this.test_didl_parsing_step (xml, bad_metadata.code); - - // test item node with missing restricted attribute - var tmp = item_node->copy (1); - tmp->unset_prop ("restricted"); - didl_node->add_child (tmp); - this.test_didl_parsing_step (xml, bad_metadata.code); - - // test item node with restricted=1 - tmp->set_prop ("restricted", "1"); - this.test_didl_parsing_step (xml, bad_metadata.code); - - // test item node with invalid id - tmp->unlink (); - tmp = item_node->copy (1); - tmp->set_prop ("id", "InvalidItemId"); - didl_node->add_child (tmp); - this.test_didl_parsing_step (xml, bad_metadata.code); - - // test item node with missing id - tmp->unset_prop ("id"); - this.test_didl_parsing_step (xml, bad_metadata.code); - - // test item node with missing title - tmp->unlink (); - tmp = item_node->copy (1); - var title_node = tmp->children; - title_node->unlink (); - didl_node->add_child (tmp); - this.test_didl_parsing_step (xml, bad_metadata.code); - - // test missing or empty upnp class - tmp->unlink (); - tmp = item_node->copy (1); - var class_node = tmp->children->next; - - class_node->set_content (""); - this.test_didl_parsing_step (xml, bad_metadata.code); - - class_node->unlink (); - this.test_didl_parsing_step (xml, bad_metadata.code); - } - - private void test_fetch_container_run (ObjectCreator creator) { - var main_loop = new MainLoop (null, false); - creator.run.begin ( () => { main_loop.quit (); }); - main_loop.run (); - } - - private void test_fetch_container () { - // check case when object is not found - var content_directory = new ContentDirectory (); - var root_container = new SearchableContainer (); - content_directory.root_container = root_container; - var action = new ServiceAction ("0", DIDL_ITEM); - var creator = new ObjectCreator (content_directory, action); - this.test_fetch_container_run (creator); - assert (action.error_code == no_such_container.code); - - // check case when found object is not a container → Error 710 - // cf. ContentDirectory:2 spec, Table 2-22 - root_container.found_object = new MediaObject (); - this.test_fetch_container_run (creator); - assert (action.error_code == no_such_container.code); - - // check case when found container does not have OCMUpload set - root_container.found_object = new MediaContainer (); - this.test_fetch_container_run (creator); - assert (action.error_code == restricted_parent.code); - - // check case when found container is not a writable container - root_container.found_object.ocm_flags |= GUPnP.OCMFlags.UPLOAD; - this.test_fetch_container_run (creator); - assert (action.error_code == restricted_parent.code); - - // check when found container does not have the correct create class - var container = new WritableContainer (); - container.create_classes.add ("object.item.imageItem.musicTrack"); - container.ocm_flags |= GUPnP.OCMFlags.UPLOAD; - root_container.found_object = container; - this.test_fetch_container_run (creator); - assert (action.error_code == bad_metadata.code); - - // check DLNA.ORG_AnyContainer when root container is not searchable - content_directory.root_container = new MediaContainer (); - action.id = "DLNA.ORG_AnyContainer"; - this.test_fetch_container_run (creator); - assert (action.error_code == no_such_container.code); - - // check DLNA.ORG_AnyContainer when no writable container is found - content_directory.root_container = new SearchableContainer (); - this.test_fetch_container_run (creator); - // We cannot distinguish this case from the "create-class doesn't match" - // case - assert (action.error_code == bad_metadata.code); - } -} diff --git a/tests/rygel-object-creator.vala b/tests/rygel-object-creator.vala deleted file mode 120000 index d790f613..00000000 --- a/tests/rygel-object-creator.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-object-creator.vala \ No newline at end of file diff --git a/tests/rygel-relational-expression.vala b/tests/rygel-relational-expression.vala deleted file mode 120000 index 40edca9e..00000000 --- a/tests/rygel-relational-expression.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-relational-expression.vala \ No newline at end of file diff --git a/tests/rygel-search-criteria-parser.vala b/tests/rygel-search-criteria-parser.vala deleted file mode 120000 index 81129160..00000000 --- a/tests/rygel-search-criteria-parser.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-search-criteria-parser.vala \ No newline at end of file diff --git a/tests/rygel-search-expression.vala b/tests/rygel-search-expression.vala deleted file mode 120000 index a0fd6b5b..00000000 --- a/tests/rygel-search-expression.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-search-expression.vala \ No newline at end of file diff --git a/tests/rygel-searchable-container.vala b/tests/rygel-searchable-container.vala deleted file mode 120000 index 034cdfa6..00000000 --- a/tests/rygel-searchable-container.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-searchable-container.vala \ No newline at end of file diff --git a/tests/rygel-serializer_object-creator.vala b/tests/rygel-serializer_object-creator.vala deleted file mode 120000 index a8cce1b0..00000000 --- a/tests/rygel-serializer_object-creator.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-serializer.vala \ No newline at end of file diff --git a/tests/rygel-state-machine_http-get.vala b/tests/rygel-state-machine_http-get.vala deleted file mode 120000 index 2b3a7af9..00000000 --- a/tests/rygel-state-machine_http-get.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-core/rygel-state-machine.vala \ No newline at end of file diff --git a/tests/rygel-state-machine_http-post.vala b/tests/rygel-state-machine_http-post.vala deleted file mode 120000 index 2b3a7af9..00000000 --- a/tests/rygel-state-machine_http-post.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-core/rygel-state-machine.vala \ No newline at end of file diff --git a/tests/rygel-state-machine_http-response.vala b/tests/rygel-state-machine_http-response.vala deleted file mode 120000 index 2b3a7af9..00000000 --- a/tests/rygel-state-machine_http-response.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-core/rygel-state-machine.vala \ No newline at end of file diff --git a/tests/rygel-state-machine_object-creator.vala b/tests/rygel-state-machine_object-creator.vala deleted file mode 120000 index 2b3a7af9..00000000 --- a/tests/rygel-state-machine_object-creator.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-core/rygel-state-machine.vala \ No newline at end of file diff --git a/tests/rygel-thumbnail.vala b/tests/rygel-thumbnail.vala deleted file mode 120000 index 0b0ee8de..00000000 --- a/tests/rygel-thumbnail.vala +++ /dev/null @@ -1 +0,0 @@ -../src/librygel-server/rygel-thumbnail.vala \ No newline at end of file -- cgit v1.2.1