1289715Sglebius#include "config.h" 2289715Sglebius 3289715Sglebius#include "ntp.h" 4289715Sglebius#include "ntp_calendar.h" 5289715Sglebius#include "ntp_stdlib.h" 6289715Sglebius 7289715Sglebius#include "unity.h" 8289715Sglebius 9289715Sglebius#include "test-libntp.h" 10289715Sglebius 11289715Sglebius 12289715Sglebius#define HAVE_NTP_SIGND 13289715Sglebius 14289715Sglebius#include "ntp_signd.c" 15289715Sglebius 16289715Sglebiusextern int ux_socket_connect(const char *name); 17289715Sglebius 18289715Sglebius 19289715Sglebius//MOCKED FUNCTIONS 20289715Sglebius 21289715Sglebius//this connect function overrides/mocks connect() from <sys/socket.h> 22293650Sglebiusint 23293650Sglebiusconnect(int socket, const struct sockaddr *address, socklen_t address_len) 24293650Sglebius{ 25289715Sglebius return 1; 26289715Sglebius} 27289715Sglebius 28293650Sglebius/* 29293650Sglebius** Mocked read() and write() calls. 30293650Sglebius** 31293650Sglebius** These will only operate 4 bytes at a time. 32293650Sglebius** 33293650Sglebius** This is so write_all can be properly tested. 34293650Sglebius*/ 35293650Sglebius 36293650Sglebiusstatic char rw_buf[4]; 37293650Sglebius 38293650Sglebiusssize_t 39293650Sglebiuswrite(int fd, void const * buf, size_t len) 40293650Sglebius{ 41293650Sglebius REQUIRE(0 <= len); 42293650Sglebius if (len >= 4) len = 4; /* 4 bytes, max */ 43293650Sglebius (void)memcpy(rw_buf, buf, len); 44293650Sglebius 45293650Sglebius return len; 46289715Sglebius} 47289715Sglebius 48293650Sglebiusssize_t 49293650Sglebiusread(int fd, void * buf, size_t len) 50293650Sglebius{ 51293650Sglebius REQUIRE(0 <= len); 52293650Sglebius if (len >= 4) len = 4; 53293650Sglebius (void)memcpy(buf, rw_buf, len); 54293650Sglebius return len; 55289715Sglebius} 56289715Sglebius 57289715Sglebius 58289715Sglebius//END OF MOCKED FUNCTIONS 59289715Sglebius 60293650Sglebiusstatic int 61293650SglebiusisGE(int a,int b) 62293650Sglebius{ 63293650Sglebius if (a >= b) {return 1;} 64289715Sglebius else {return 0;} 65289715Sglebius} 66289715Sglebius 67293650Sglebiusextern void test_connect_incorrect_socket(void); 68293650Sglebiusextern void test_connect_correct_socket(void); 69293650Sglebiusextern void test_write_all(void); 70293650Sglebiusextern void test_send_packet(void); 71293650Sglebiusextern void test_recv_packet(void); 72293650Sglebiusextern void test_send_via_ntp_signd(void); 73289715Sglebius 74293650Sglebius 75289715Sglebiusvoid 76293650Sglebiustest_connect_incorrect_socket(void) 77293650Sglebius{ 78289715Sglebius TEST_ASSERT_EQUAL(-1, ux_socket_connect(NULL)); 79293650Sglebius 80293650Sglebius return; 81289715Sglebius} 82289715Sglebius 83289715Sglebiusvoid 84293650Sglebiustest_connect_correct_socket(void) 85293650Sglebius{ 86289715Sglebius int temp = ux_socket_connect("/socket"); 87289715Sglebius 88289715Sglebius //risky, what if something is listening on :123, or localhost isnt 127.0.0.1? 89289715Sglebius //TEST_ASSERT_EQUAL(-1, ux_socket_connect("127.0.0.1:123")); 90289715Sglebius 91289715Sglebius //printf("%d\n",temp); 92289715Sglebius TEST_ASSERT_TRUE(isGE(temp,0)); 93289715Sglebius 94289715Sglebius //write_all(); 95289715Sglebius //char *socketName = "Random_Socket_Name"; 96289715Sglebius //int length = strlen(socketName); 97289715Sglebius 98293650Sglebius return; 99289715Sglebius} 100289715Sglebius 101289715Sglebius 102289715Sglebiusvoid 103293650Sglebiustest_write_all(void) 104293650Sglebius{ 105289715Sglebius int fd = ux_socket_connect("/socket"); 106293650Sglebius 107293650Sglebius TEST_ASSERT_TRUE(isGE(fd, 0)); 108293650Sglebius 109289715Sglebius char * str = "TEST123"; 110289715Sglebius int temp = write_all(fd, str,strlen(str)); 111293650Sglebius TEST_ASSERT_EQUAL(strlen(str), temp); 112293650Sglebius 113293650Sglebius (void)close(fd); 114293650Sglebius return; 115289715Sglebius} 116289715Sglebius 117289715Sglebius 118289715Sglebiusvoid 119293650Sglebiustest_send_packet(void) 120293650Sglebius{ 121289715Sglebius int fd = ux_socket_connect("/socket"); 122293650Sglebius 123293650Sglebius TEST_ASSERT_TRUE(isGE(fd, 0)); 124293650Sglebius 125289715Sglebius char * str2 = "PACKET12345"; 126289715Sglebius int temp = send_packet(fd, str2, strlen(str2)); 127293650Sglebius 128289715Sglebius TEST_ASSERT_EQUAL(0,temp); 129293650Sglebius 130293650Sglebius (void)close(fd); 131293650Sglebius return; 132289715Sglebius} 133289715Sglebius 134289715Sglebius 135293650Sglebius/* 136293650Sglebius** HMS: What's going on here? 137293650Sglebius** Looks like this needs more work. 138293650Sglebius*/ 139289715Sglebiusvoid 140293650Sglebiustest_recv_packet(void) 141293650Sglebius{ 142294569Sdelphij#if 0 143289715Sglebius int fd = ux_socket_connect("/socket"); 144289715Sglebius 145293650Sglebius TEST_ASSERT_TRUE(isGE(fd, 0)); 146293650Sglebius 147293650Sglebius uint32_t size = 256; 148293650Sglebius char *str = NULL; 149289715Sglebius int temp = recv_packet(fd, &str, &size); 150293650Sglebius 151289715Sglebius send_packet(fd, str, strlen(str)); 152293650Sglebius free(str); 153289715Sglebius TEST_ASSERT_EQUAL(0,temp); //0 because nobody sent us anything (yet!) 154293650Sglebius 155293650Sglebius (void)close(fd); 156294569Sdelphij#else 157294569Sdelphij TEST_IGNORE_MESSAGE("test_recv_packet() needs work"); 158294569Sdelphij#endif 159293650Sglebius return; 160289715Sglebius} 161289715Sglebius 162289715Sglebiusvoid 163293650Sglebiustest_send_via_ntp_signd(void) 164293650Sglebius{ 165289715Sglebius struct recvbuf *rbufp = (struct recvbuf *) malloc(sizeof(struct recvbuf)); 166289715Sglebius int xmode = 1; 167289715Sglebius keyid_t xkeyid = 12345; 168293650Sglebius int flags = 0; 169289715Sglebius struct pkt *xpkt = (struct pkt *) malloc(sizeof(struct pkt)); //defined in ntp.h 170289715Sglebius 171293650Sglebius TEST_ASSERT_NOT_NULL(rbufp); 172293650Sglebius TEST_ASSERT_NOT_NULL(xpkt); 173293650Sglebius memset(xpkt, 0, sizeof(struct pkt)); 174293650Sglebius 175289715Sglebius //send_via_ntp_signd(NULL,NULL,NULL,NULL,NULL); //doesn't work 176293650Sglebius /* 177293650Sglebius ** Send the xpkt to Samba, read the response back in rbufp 178293650Sglebius */ 179289715Sglebius send_via_ntp_signd(rbufp,xmode,xkeyid,flags,xpkt); 180289715Sglebius 181293650Sglebius free(rbufp); 182293650Sglebius free(xpkt); 183289715Sglebius 184293650Sglebius return; 185289715Sglebius} 186