Create repository
[fwd.git] / test / mock_io.c
1 /*
2  * QuanDocs mock I/O routines for unit testing.
3  * 
4  * Copyright (C) 2015 Chris Jaekl
5  */
6
7 #include <assert.h>
8 #include <stdlib.h>
9 #include <string.h>
10
11 #include "mock_io.h"
12
13 static void *  readBuf = NULL;
14 static ssize_t readBufSize = 0;
15 static ssize_t readPos = 0;
16
17 static void *  writeBuf = NULL;
18 static ssize_t writeBufSize = 0;
19 static ssize_t writePos = 0;
20
21 ssize_t qdMock_read(int fd, void *buf, size_t count)
22 {
23     assert(NULL != readBuf);
24     
25     if (readPos < readBufSize) {
26         ssize_t remain = readBufSize - readPos;
27         ssize_t num = (count <= remain) ? count : remain;
28         unsigned char * p = (unsigned char *)readBuf;
29         p += readPos;
30         
31         memcpy(buf, p, num);
32         readPos += num;
33         return num;
34     }
35     return 0;   // EOF
36 }
37
38 void qdMock_resetReadBytes(void *buf, size_t count) 
39 {
40     if (NULL != readBuf) {
41         free(readBuf);
42     }
43     readBuf = malloc(count);
44     assert(NULL != readBuf);
45
46     memcpy(readBuf, buf, count);
47
48     readBufSize = count;
49     readPos = 0;
50 }    
51  
52 ssize_t qdMock_getNumBytesRead() {
53     return readPos;
54 }
55
56
57 ssize_t qdMock_write(int fd, void *buf, size_t count) 
58 {
59     assert((0 == writeBufSize) || (NULL != writeBuf));
60     
61     if (writePos < writeBufSize) {
62         ssize_t remain = writeBufSize - writePos;
63         ssize_t num = (count <= remain) ? count : remain;
64         unsigned char * p = (unsigned char *)writeBuf;
65         p += writePos;
66
67         memcpy(p, buf, num);
68         writePos += num;
69         return num;
70     }
71     return 0;
72 }
73
74 void qdMock_resetWriteBuf(ssize_t size) 
75 {
76     writePos = 0;
77
78     if (writeBufSize == size) {
79         return;
80     }
81
82     if (NULL != writeBuf) {
83         free(writeBuf);
84     }
85
86     writeBuf = malloc(size);
87     assert(NULL != writeBuf);
88     writeBufSize = size;
89 }    
90
91 ssize_t qdMock_getNumBytesWritten() 
92 {
93     return writePos;
94 }
95
96 const void * qdMock_getBytesWritten() 
97 {
98     return writeBuf;
99 }
100
101