diff options
Diffstat (limited to 'camel/tests')
-rw-r--r-- | camel/tests/Makefile.am | 2 | ||||
-rw-r--r-- | camel/tests/lib/Makefile.am | 4 | ||||
-rw-r--r-- | camel/tests/stream/Makefile.am | 21 | ||||
-rw-r--r-- | camel/tests/stream/test1.c | 119 | ||||
-rw-r--r-- | camel/tests/stream/test2.c | 53 | ||||
-rw-r--r-- | camel/tests/stream/test3.c | 104 |
6 files changed, 301 insertions, 2 deletions
diff --git a/camel/tests/Makefile.am b/camel/tests/Makefile.am index 327f75816d..f604cb81a1 100644 --- a/camel/tests/Makefile.am +++ b/camel/tests/Makefile.am @@ -1,4 +1,4 @@ SUBDIRS = lib \ - message folder + message folder stream diff --git a/camel/tests/lib/Makefile.am b/camel/tests/lib/Makefile.am index a87dc59bf6..aef91a1253 100644 --- a/camel/tests/lib/Makefile.am +++ b/camel/tests/lib/Makefile.am @@ -7,7 +7,9 @@ libcameltest_a_SOURCES = \ camel-test.c camel-test.h \ messages.c messages.h \ addresses.c addresses.h \ - folders.c folders.h + folders.c folders.h \ + streams.c streams.h + diff --git a/camel/tests/stream/Makefile.am b/camel/tests/stream/Makefile.am new file mode 100644 index 0000000000..d16f8aaa55 --- /dev/null +++ b/camel/tests/stream/Makefile.am @@ -0,0 +1,21 @@ + +INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir) -I$(top_srcdir)/camel \ + -I$(includedir) \ + -I$(top_srcdir)/camel/tests/lib \ + -DG_LOG_DOMAIN=\"evolution-tests\" + +LDADD = \ + $(top_builddir)/camel/libcamel.la \ + $(top_builddir)/e-util/libeutil.la \ + $(top_builddir)/libibex/libibex.la \ + $(GNOME_LIBDIR) \ + $(top_builddir)/camel/tests/lib/libcameltest.a \ + $(GNOMEUI_LIBS) $(INTLLIBS) $(EXTRA_GNOME_LIBS) + +check_PROGRAMS = \ + test1 test2 test3 + +TESTS = test1 test2 test3 + + + diff --git a/camel/tests/stream/test1.c b/camel/tests/stream/test1.c new file mode 100644 index 0000000000..452d45274f --- /dev/null +++ b/camel/tests/stream/test1.c @@ -0,0 +1,119 @@ +/* + test ... camelstreamfs */ + +#include "camel-test.h" +#include "streams.h" + +#include <errno.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "camel/camel-stream-fs.h" + +int main(int argc, char **argv) +{ + CamelSeekableStream *ss = NULL; + int i; + int fd = -1; + struct stat st; + int size; + char buffer[1024]; + + camel_test_init(argc, argv); + + camel_test_start("CamelStream fs, open, seek, read, write, eos"); + for (i=0;i<2;i++) { + + (void)unlink("stream.txt"); + + push("trying to open a nonexistant stream, method %d", i); + switch(i) { + case 0: + ss = (CamelSeekableStream *)camel_stream_fs_new_with_name("stream.txt", O_RDWR, 0); + break; + case 1: + fd = open("stream.txt", O_RDWR, 0); + ss = (CamelSeekableStream *)camel_stream_fs_new_with_fd(fd); + break; + } + check(ss == NULL && errno == ENOENT); + check(stat("stream.txt", &st) == -1 && errno == ENOENT); + pull(); + + push("Creating stream using method %d", i); + switch(i) { + case 0: + ss = (CamelSeekableStream *)camel_stream_fs_new_with_name("stream.txt", O_CREAT|O_RDWR|O_TRUNC, 0600); + fd = ((CamelStreamFs *)ss)->fd; + break; + case 1: + fd = open("stream.txt", O_CREAT|O_RDWR|O_TRUNC, 0600); + ss = (CamelSeekableStream *)camel_stream_fs_new_with_fd(fd); + break; + } + check(ss != NULL); + check(stat("stream.txt", &st) == 0 && (st.st_mode&0777) == 0600 && S_ISREG(st.st_mode) && st.st_size == 0); + pull(); + + test_stream_seekable_writepart(ss); + test_stream_seekable_readpart(ss); + + push("getting filesize"); + check(stat("stream.txt", &st) == 0 && (st.st_mode&0777) == 0600 && S_ISREG(st.st_mode)); + size = st.st_size; + pull(); + + push("checking close closes"); + check_unref(ss, 1); + check(close(fd) == -1); + pull(); + + push("re-opening stream"); + switch(i) { + case 0: + ss = (CamelSeekableStream *)camel_stream_fs_new_with_name("stream.txt", O_RDWR, 0); + fd = ((CamelStreamFs *)ss)->fd; + break; + case 1: + fd = open("stream.txt", O_RDWR, 0); + ss = (CamelSeekableStream *)camel_stream_fs_new_with_fd(fd); + break; + } + check(ss != NULL); + check(stat("stream.txt", &st) == 0 && (st.st_mode&0777) == 0600 && S_ISREG(st.st_mode) && st.st_size == size); + + test_stream_seekable_readpart(ss); + + check_unref(ss, 1); + check(close(fd) == -1); + pull(); + + push("re-opening stream with truncate"); + switch(i) { + case 0: + ss = (CamelSeekableStream *)camel_stream_fs_new_with_name("stream.txt", O_RDWR|O_TRUNC, 0); + fd = ((CamelStreamFs *)ss)->fd; + break; + case 1: + fd = open("stream.txt", O_RDWR|O_TRUNC, 0); + ss = (CamelSeekableStream *)camel_stream_fs_new_with_fd(fd); + break; + } + check(ss != NULL); + check(stat("stream.txt", &st) == 0 && (st.st_mode&0777) == 0600 && S_ISREG(st.st_mode) && st.st_size == 0); + + /* read has to return 0 before eos is set */ + check(camel_stream_read(CAMEL_STREAM(ss), buffer, 1) == 0); + check(camel_stream_eos(CAMEL_STREAM(ss))); + + check_unref(ss, 1); + check(close(fd) == -1); + pull(); + + (void)unlink("stream.txt"); + } + + camel_test_end(); + + return 0; +} diff --git a/camel/tests/stream/test2.c b/camel/tests/stream/test2.c new file mode 100644 index 0000000000..02ad88e95c --- /dev/null +++ b/camel/tests/stream/test2.c @@ -0,0 +1,53 @@ +/* + test ... camelstreammem */ + +#include "camel-test.h" +#include "streams.h" + +#include <errno.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "camel/camel-stream-mem.h" + +int main(int argc, char **argv) +{ + CamelSeekableStream *ss = NULL; + int i; + int fd = -1; + struct stat st; + int size; + char buffer[1024]; + GByteArray *ba; + + camel_test_init(argc, argv); + + camel_test_start("CamelStream mem, create, seek, read, write, eos"); + for (i=0;i<3;i++) { + + push("Creating stream using method %d", i); + switch(i) { + case 0: + ss = (CamelSeekableStream *)camel_stream_mem_new(); + break; + case 1: + ba = g_byte_array_new(); + ss = (CamelSeekableStream *)camel_stream_mem_new_with_byte_array(ba); + break; + case 2: + ss = (CamelSeekableStream *)camel_stream_mem_new_with_buffer("", 0); + break; + } + check(ss != NULL); + + test_stream_seekable_writepart(ss); + test_stream_seekable_readpart(ss); + + check_unref(ss, 1); + pull(); + } + + camel_test_end(); + + return 0; +} diff --git a/camel/tests/stream/test3.c b/camel/tests/stream/test3.c new file mode 100644 index 0000000000..b870a7773e --- /dev/null +++ b/camel/tests/stream/test3.c @@ -0,0 +1,104 @@ +/* + test ... camelseekablesubstream */ + +#include "camel-test.h" +#include "streams.h" + +#include <errno.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "camel/camel-stream-mem.h" +#include "camel/camel-stream-fs.h" +#include "camel/camel-seekable-substream.h" + +#define ARRAY_LEN(x) (sizeof(x)/sizeof(x[0])) + +struct { + off_t lower, upper; +} ranges[] = { + { 3, 10241 }, + { 0, 1024 }, + { 0, 0 }, + { 0, 1 }, + { 0, 2 }, + { 0, 3 }, + { 0, 7 }, + { 1, 8 }, + { 1, 9 }, + { 10245, 10300 }, + { 0, CAMEL_STREAM_UNBOUND }, +/* { 1, CAMEL_STREAM_UNBOUND }, + { 2, CAMEL_STREAM_UNBOUND }, + { 3, CAMEL_STREAM_UNBOUND }, these take too long to run + { 7, CAMEL_STREAM_UNBOUND },*/ + { 10245, CAMEL_STREAM_UNBOUND }, +}; + +int main(int argc, char **argv) +{ + CamelSeekableStream *ss = NULL; + int i, j; + CamelSeekableSubstream *sus, *sus2; + + camel_test_init(argc, argv); + + camel_test_start("CamelSeekableSubstream, mem backing"); + for (j=0;j<SEEKABLE_SUBSTREAM_WAYS;j++) { + push("testing writing method %d", j); + ss = (CamelSeekableStream *)camel_stream_mem_new(); + check(ss != NULL); + for (i=0;i<ARRAY_LEN(ranges);i++) { + push("stream subrange %d-%d", ranges[i].lower, ranges[i].upper); + sus = (CamelSeekableSubstream *)camel_seekable_substream_new_with_seekable_stream_and_bounds(ss, ranges[i].lower, ranges[i].upper); + check(sus != NULL); + + test_seekable_substream_writepart((CamelStream *)sus, j); + test_seekable_substream_readpart((CamelStream *)sus); + + sus2 = (CamelSeekableSubstream *)camel_seekable_substream_new_with_seekable_stream_and_bounds(ss, ranges[i].lower, ranges[i].upper); + check(sus2 != NULL); + test_seekable_substream_readpart((CamelStream *)sus2); + + check_unref(sus, 1); + check_unref(sus2, 1); + pull(); + } + check_unref(ss, 1); + pull(); + } + + camel_test_end(); + + (void)unlink("stream.txt"); + + camel_test_start("CamelSeekableSubstream, file backing"); + for (j=0;j<SEEKABLE_SUBSTREAM_WAYS;j++) { + push("testing writing method %d", j); + ss = (CamelSeekableStream *)camel_stream_fs_new_with_name("stream.txt", O_RDWR|O_CREAT|O_TRUNC, 0600); + check(ss != NULL); + for (i=0;i<ARRAY_LEN(ranges);i++) { + push("stream subrange %d-%d", ranges[i].lower, ranges[i].upper); + sus = (CamelSeekableSubstream *)camel_seekable_substream_new_with_seekable_stream_and_bounds(ss, ranges[i].lower, ranges[i].upper); + check(sus != NULL); + + test_seekable_substream_writepart((CamelStream *)sus, j); + test_seekable_substream_readpart((CamelStream *)sus); + + sus2 = (CamelSeekableSubstream *)camel_seekable_substream_new_with_seekable_stream_and_bounds(ss, ranges[i].lower, ranges[i].upper); + check(sus2 != NULL); + test_seekable_substream_readpart((CamelStream *)sus2); + + check_unref(sus, 1); + check_unref(sus2, 1); + pull(); + } + check_unref(ss, 1); + (void)unlink("stream.txt"); + pull(); + } + + camel_test_end(); + + return 0; +} |