[rygel] tests: Extend rygel-http-get-test.vala
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] tests: Extend rygel-http-get-test.vala
- Date: Wed, 4 Jan 2012 12:56:22 +0000 (UTC)
commit 959d8bd1d3fa51b25aff4bd059a2fe2870a4a397
Author: Marcin Kazmierczak <marcin kazmierczak comarch com>
Date: Fri Dec 23 12:36:52 2011 +0100
tests: Extend rygel-http-get-test.vala
tests/rygel-http-get-test.vala | 183 +++++++++++++++++++++++++++++++++++-----
1 files changed, 160 insertions(+), 23 deletions(-)
---
diff --git a/tests/rygel-http-get-test.vala b/tests/rygel-http-get-test.vala
index ce73dc6..9b5912c 100644
--- a/tests/rygel-http-get-test.vala
+++ b/tests/rygel-http-get-test.vala
@@ -35,10 +35,35 @@ public errordomain Rygel.ClientHacksError {
public class Rygel.ClientHacks {
public static ClientHacks create (Message? message) throws Error {
- throw new ClientHacksError.NA ("");
+ var headers = message.request_headers;
+ if (headers.get_one ("clienthacks.test.rygel") != null) {
+ return new ClientHacks ();
+ } else {
+ throw new ClientHacksError.NA ("");
+ }
}
- public void apply (MediaItem item) {
+ public void apply (MediaItem? item) {
+ }
+}
+
+public class Rygel.TestRequestFactory {
+ public Soup.Message msg;
+ public Soup.KnownStatusCode expected_code;
+
+ public TestRequestFactory (Soup.Message msg,
+ Soup.KnownStatusCode expected_code) {
+ this.msg = msg;
+ this.expected_code = expected_code;
+ }
+
+ internal HTTPGet create_get (HTTPServer http_server,
+ Soup.Server server,
+ Soup.Message msg) {
+ HTTPGet request = new HTTPGet (http_server, server, msg);
+ request.handler = null;
+
+ return request;
}
}
@@ -53,6 +78,9 @@ public class Rygel.HTTPGetTest : GLib.Object {
private Error error;
+ private ArrayList<TestRequestFactory> requests;
+ private TestRequestFactory current_request;
+
public static int main (string[] args) {
try {
var test = new HTTPGetTest ();
@@ -71,9 +99,9 @@ public class Rygel.HTTPGetTest : GLib.Object {
public HTTPGetTest () throws Error {
this.server = new HTTPServer ();
- this.client = new HTTPClient (this.server.context,
- this.server.uri);
+ this.client = new HTTPClient (this.server.context);
this.main_loop = new MainLoop (null, false);
+ this.create_test_messages();
}
public virtual void run () throws Error {
@@ -81,7 +109,7 @@ public class Rygel.HTTPGetTest : GLib.Object {
this.server.message_received.connect (this.on_message_received);
this.client.completed.connect (this.on_client_completed);
- this.client.run.begin ();
+ this.start_next_test_request ();
this.main_loop.run ();
@@ -90,18 +118,93 @@ public class Rygel.HTTPGetTest : GLib.Object {
}
}
- private HTTPRequest create_request (Soup.Message msg) throws Error {
- return new HTTPGet (this.server,
- this.server.context.server,
- msg);
+ private void create_test_messages () {
+ requests = new ArrayList<TestRequestFactory> ();
+
+ Soup.Message request = new Soup.Message ("POST", this.server.uri);
+ requests.add (new TestRequestFactory (request,
+ Soup.KnownStatusCode.BAD_REQUEST));
+
+ request = new Soup.Message ("HEAD", this.server.uri);
+ requests.add (new TestRequestFactory (request, Soup.KnownStatusCode.OK));
+
+ request = new Soup.Message ("GET", this.server.uri);
+ requests.add (new TestRequestFactory (request, Soup.KnownStatusCode.OK));
+
+ string uri = this.server.create_uri ("VideoItem");
+ uri = uri + "/tr/MPEG";
+ request = new Soup.Message ("HEAD", uri);
+ requests.add (new TestRequestFactory (request, Soup.KnownStatusCode.OK));
+
+ request = new Soup.Message ("GET", this.server.uri);
+ request.request_headers.append ("transferMode.dlna.org", "Streaming");
+ requests.add (new TestRequestFactory (request, Soup.KnownStatusCode.OK));
+
+ request = new Soup.Message ("GET", this.server.uri);
+ request.request_headers.append ("transferMode.dlna.org", "Interactive");
+ requests.add (new TestRequestFactory (request,
+ Soup.KnownStatusCode.NOT_ACCEPTABLE));
+
+ request = new Soup.Message ("GET", this.server.uri);
+ request.request_headers.append ("Range", "bytes=1-2");
+ requests.add (new TestRequestFactory (request,
+ Soup.KnownStatusCode.OK));
+
+ uri = this.server.create_uri ("AudioItem");
+ uri = uri + "/th/0";
+
+ request = new Soup.Message ("GET", uri);
+ requests.add (new TestRequestFactory (request,
+ Soup.KnownStatusCode.NOT_FOUND));
+
+ request = new Soup.Message ("GET", this.server.uri);
+ request.request_headers.append ("TimeSeekRange.dlna.org", "0");
+ requests.add (new TestRequestFactory (request,
+ Soup.KnownStatusCode.NOT_ACCEPTABLE));
+
+ uri = this.server.create_uri ("AudioItem");
+ request = new Soup.Message ("GET", uri);
+ request.request_headers.append ("TimeSeekRange.dlna.org", "0");
+ requests.add (new TestRequestFactory (request,
+ Soup.KnownStatusCode.BAD_REQUEST));
+
+ uri = this.server.create_uri ("AudioItem");
+ request = new Soup.Message ("GET", uri);
+ request.request_headers.append ("TimeSeekRange.dlna.org", "npt=1-2049");
+ requests.add (new TestRequestFactory (request,
+ Soup.KnownStatusCode.REQUESTED_RANGE_NOT_SATISFIABLE));
+
+ request = new Soup.Message ("GET", this.server.uri);
+ request.request_headers.append ("clienthacks.test.rygel", "f");
+ requests.add (new TestRequestFactory (request,
+ Soup.KnownStatusCode.OK));
+
+ request = new Soup.Message ("GET", this.server.uri);
+ request.request_headers.append ("clienthacks.test.rygel", "t");
+ requests.add (new TestRequestFactory (request,
+ Soup.KnownStatusCode.OK));
+ }
+
+ private HTTPGet create_request (Soup.Message msg) throws Error {
+ HTTPGet request = this.current_request.create_get (this.server,
+ this.server.context.server, msg);
+ return request;
}
private void on_client_completed (StateMachine client) {
- if (this.server_done) {
+ if (requests.size > 0) {
+ this.start_next_test_request ();
+ this.client.run.begin ();
+ } else {
this.main_loop.quit ();
+ this.client_done = true;
}
+ }
- this.client_done = true;
+ private void start_next_test_request() {
+ this.current_request = requests.remove_at (0);
+ this.client.msg = this.current_request.msg;
+ this.client.run.begin ();
}
private void on_message_received (HTTPServer server,
@@ -117,6 +220,9 @@ public class Rygel.HTTPGetTest : GLib.Object {
assert ((request as HTTPGet).item != null);
+ debug ("status.code: %d", (int) msg.status_code);
+ assert (msg.status_code == this.current_request.expected_code);
+
if (this.client_done) {
this.main_loop.quit ();
}
@@ -151,11 +257,14 @@ public class Rygel.HTTPServer : GLib.Object {
public string uri {
owned get {
- var item_uri = new HTTPItemURI (this.root_container.ITEM_ID,
- this);
+ return create_uri("VideoItem");
+ }
+ }
+ public string create_uri(string item_id) {
+ var item_uri = new HTTPItemURI (item_id,
+ this);
return item_uri.to_string ();
- }
}
public signal void message_received (Soup.Message message);
@@ -196,12 +305,8 @@ public class Rygel.HTTPClient : GLib.Object, StateMachine {
public Cancellable cancellable { get; set; }
- public HTTPClient (GUPnP.Context context,
- string uri) {
+ public HTTPClient (GUPnP.Context context) {
this.context = context;
-
- this.msg = new Soup.Message ("GET", uri);
- assert (this.msg != null);
}
public async void run () {
@@ -218,7 +323,6 @@ public class Rygel.HTTPClient : GLib.Object, StateMachine {
}
public class Rygel.MediaContainer : Rygel.MediaObject {
- public const string ITEM_ID = "TestItem";
public async MediaObject? find_object (string item_id,
Cancellable? cancellable)
@@ -232,8 +336,11 @@ public class Rygel.MediaContainer : Rygel.MediaObject {
yield;
- if (item_id == ITEM_ID) {
+ debug ("item id: %s", item_id);
+ if (item_id == "VideoItem") {
return new VideoItem ();
+ } else if (item_id == "AudioItem") {
+ return new AudioItem ();
} else {
return null;
}
@@ -265,7 +372,10 @@ public abstract class Rygel.MediaItem : Rygel.MediaObject {
public bool place_holder = false;
public bool is_live_stream () {
- return true;
+ if (this.id == "VideoItem")
+ return false;
+ else
+ return true;
}
public bool streamable () {
@@ -275,6 +385,10 @@ public abstract class Rygel.MediaItem : Rygel.MediaObject {
private class Rygel.AudioItem : MediaItem {
public int64 duration = 2048;
+
+ public AudioItem () {
+ this.id = "AudioItem";
+ }
}
private interface Rygel.VisualItem : MediaItem {
@@ -285,6 +399,14 @@ private interface Rygel.VisualItem : MediaItem {
public abstract int color_depth { get; set; }
public abstract ArrayList<Thumbnail> thumbnails { get; protected set; }
+
+ public bool is_live_stream () {
+ return false;
+ }
+
+ public bool streamable () {
+ return false;
+ }
}
private class Rygel.VideoItem : AudioItem, VisualItem {
@@ -294,7 +416,22 @@ private class Rygel.VideoItem : AudioItem, VisualItem {
public int pixel_height { get; set; default = -1; }
public int color_depth { get; set; default = -1; }
- public ArrayList<Thumbnail> thumbnails { get; protected set; }
+ private ArrayList<Thumbnail> ts;
+
+ public VideoItem () {
+ this.id = "VideoItem";
+ }
+
+ public ArrayList<Thumbnail> thumbnails {
+ get {
+ this.ts = new ArrayList<Thumbnail>();
+ ts.add(new Rygel.Thumbnail());
+ return this.ts;
+ }
+
+ protected set {}
+ }
+
public ArrayList<Subtitle> subtitles;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]