Add a bytesource test for broken markers.
authorSteinar H. Gunderson <sesse@debian.org>
Sat, 3 Jan 2009 01:19:56 +0000 (02:19 +0100)
committerSteinar H. Gunderson <sesse@debian.org>
Sat, 3 Jan 2009 01:19:56 +0000 (02:19 +0100)
bytesource_test.c

index 79c242a..4dc7661 100644 (file)
@@ -31,7 +31,7 @@ ssize_t custom_read_slow(void* userdata, uint8_t* buf, size_t count)
 }
 
 // Two streams, separated by a marker.
-uint8_t bytes[] = {
+uint8_t stream_bytes[] = {
        0x01, 0x02, 0x03, 0xff, 0x00, 0x04,     // some bytes
        0xff, 0xf7,                             // a marker
        0x05, 0x06, 0x07, 0x08, 0xff, 0x00      // more bytes
@@ -49,8 +49,8 @@ uint8_t second_stream[] = {
 void test_basic_reading()
 {
        struct custom_read_userdata ud;
-       ud.bytes = bytes;
-       ud.bytes_left = sizeof(bytes);
+       ud.bytes = stream_bytes;
+       ud.bytes_left = sizeof(stream_bytes);
 
        struct byte_source source;
        init_byte_source(&source, custom_read, &ud);
@@ -84,8 +84,8 @@ void test_basic_reading()
 void test_slow_source()
 {
        struct custom_read_userdata ud;
-       ud.bytes = bytes;
-       ud.bytes_left = sizeof(bytes);
+       ud.bytes = stream_bytes;
+       ud.bytes_left = sizeof(stream_bytes);
 
        struct byte_source source;
        init_byte_source(&source, custom_read_slow, &ud);
@@ -123,6 +123,31 @@ void test_slow_source()
        assert(ret == 0);
 }
 
+// Data with a truncated marker should first give the first bytes, then failure
+// on next read since the stream EOFs.
+void test_broken_marker()
+{
+       uint8_t bytes[] = { 0x01, 0x02, 0x03, 0x04, 0xff };
+       uint8_t expected_bytes[] = { 0x01, 0x02, 0x03, 0x04 };
+
+       struct custom_read_userdata ud;
+       ud.bytes = bytes;
+       ud.bytes_left = sizeof(bytes);
+
+       struct byte_source source;
+       init_byte_source(&source, custom_read, &ud);
+       
+       uint8_t buf[4096];
+       ssize_t ret;
+
+       ret = byte_source_input_func(&source, buf, 4096);
+       assert(ret == sizeof(expected_bytes));
+       assert(memcmp(buf, expected_bytes, sizeof(expected_bytes)) == 0);
+
+       ret = byte_source_input_func(&source, buf, 4096);
+       assert(ret == -1);
+}
+
 int main(void)
 {
        init_choices();
@@ -133,6 +158,9 @@ int main(void)
        printf("test_slow_source()\n");
        test_slow_source();
        
+       printf("test_broken_marker()\n");
+       test_broken_marker();
+       
        printf("All tests pass.\n");
        return 0;
 }