69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <unistd.h>
 | |
| #include <stdlib.h>
 | |
| #include "munit.h"
 | |
| 
 | |
| #include "write_socket.h"
 | |
| #include "common.h"
 | |
| 
 | |
| enum hs_test_write_mode_e {
 | |
|   HS_TEST_WRITE_SUCCESS,
 | |
|   HS_TEST_WRITE_PARTIAL
 | |
| };
 | |
| 
 | |
| static enum hs_test_write_mode_e hs_test_write_mode;
 | |
| static int write_stub_enabled = 0;
 | |
| 
 | |
| void hs_test_enable_write_stub(int enabled) {
 | |
|   write_stub_enabled = enabled;
 | |
| }
 | |
| 
 | |
| ssize_t hs_test_write(int fd, char const *data, size_t size) {
 | |
|   if (write_stub_enabled) {
 | |
|     switch (hs_test_write_mode) {
 | |
|       case HS_TEST_WRITE_SUCCESS:
 | |
|         return size;
 | |
|       case HS_TEST_WRITE_PARTIAL:
 | |
|         return size / 2;
 | |
|     }
 | |
|     return 0;
 | |
|   } else {
 | |
|     return write(fd, data, size);
 | |
|   }
 | |
| }
 | |
| 
 | |
| static struct http_request_s* setup_test_request() {
 | |
|   struct http_request_s* request = calloc(1, sizeof(struct http_request_s));
 | |
|   request->server = calloc(1, sizeof(struct http_server_s));
 | |
| 
 | |
|   request->buffer.buf = (char *)calloc(1, 1024);
 | |
|   request->buffer.capacity = 1024;
 | |
| 
 | |
|   return request;
 | |
| }
 | |
| 
 | |
| static void destroy_test_request(struct http_request_s* request) {
 | |
|   free(request->server);
 | |
|   free(request->buffer.buf);
 | |
|   free(request->tokens.buf);
 | |
|   free(request);
 | |
| }
 | |
| 
 | |
| MunitResult test_write_socket_partial(const MunitParameter params[], void* data) {
 | |
|   (void)params;
 | |
|   (void)data;
 | |
| 
 | |
|   struct http_request_s* request = setup_test_request();
 | |
| 
 | |
|   request->buffer.length = 512;
 | |
| 
 | |
|   hs_test_write_mode = HS_TEST_WRITE_PARTIAL;
 | |
|   hs_test_enable_write_stub(1);
 | |
|   enum hs_write_rc_e rc = hs_write_socket(request);
 | |
| 
 | |
|   munit_assert_int(rc, ==, HS_WRITE_RC_CONTINUE);
 | |
| 
 | |
|   destroy_test_request(request);
 | |
| 
 | |
|   return MUNIT_OK;
 | |
| }
 | 
