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;
 | 
						|
}
 |