xref: /NextBSD/contrib/ntp/tests/ntpd/t-ntp_signd.c (revision ea41b2069698db5cfd8b1d3888556269b4fdc668)
1 #include "config.h"
2 
3 #include "ntp.h"
4 #include "ntp_calendar.h"
5 #include "ntp_stdlib.h"
6 
7 #include "unity.h"
8 
9 #include "test-libntp.h"
10 
11 
12 #define HAVE_NTP_SIGND
13 
14 #include "ntp_signd.c"
15 
16 extern int ux_socket_connect(const char *name);
17 
18 
19 //MOCKED FUNCTIONS
20 
21 //this connect function overrides/mocks connect() from  <sys/socket.h>
22 int
connect(int socket,const struct sockaddr * address,socklen_t address_len)23 connect(int socket, const struct sockaddr *address, socklen_t address_len)
24 {
25 	return 1;
26 }
27 
28 /*
29 ** Mocked read() and write() calls.
30 **
31 ** These will only operate 4 bytes at a time.
32 **
33 ** This is so write_all can be properly tested.
34 */
35 
36 static char rw_buf[4];
37 
38 ssize_t
write(int fd,void const * buf,size_t len)39 write(int fd, void const * buf, size_t len)
40 {
41 	REQUIRE(0 <= len);
42 	if (len >= 4) len = 4;	/* 4 bytes, max */
43 	(void)memcpy(rw_buf, buf, len);
44 
45 	return len;
46 }
47 
48 ssize_t
read(int fd,void * buf,size_t len)49 read(int fd, void * buf, size_t len)
50 {
51 	REQUIRE(0 <= len);
52 	if (len >= 4) len = 4;
53 	(void)memcpy(buf, rw_buf, len);
54 	return len;
55 }
56 
57 
58 //END OF MOCKED FUNCTIONS
59 
60 static int
isGE(int a,int b)61 isGE(int a,int b)
62 {
63 	if (a >= b) {return 1;}
64 	else {return 0;}
65 }
66 
67 extern void test_connect_incorrect_socket(void);
68 extern void test_connect_correct_socket(void);
69 extern void test_write_all(void);
70 extern void test_send_packet(void);
71 extern void test_recv_packet(void);
72 extern void test_send_via_ntp_signd(void);
73 
74 
75 void
test_connect_incorrect_socket(void)76 test_connect_incorrect_socket(void)
77 {
78 	TEST_ASSERT_EQUAL(-1, ux_socket_connect(NULL));
79 
80 	return;
81 }
82 
83 void
test_connect_correct_socket(void)84 test_connect_correct_socket(void)
85 {
86 	int temp = ux_socket_connect("/socket");
87 
88 	//risky, what if something is listening on :123, or localhost isnt 127.0.0.1?
89 	//TEST_ASSERT_EQUAL(-1, ux_socket_connect("127.0.0.1:123"));
90 
91 	//printf("%d\n",temp);
92 	TEST_ASSERT_TRUE(isGE(temp,0));
93 
94 	//write_all();
95 	//char *socketName = "Random_Socket_Name";
96 	//int length = strlen(socketName);
97 
98 	return;
99 }
100 
101 
102 void
test_write_all(void)103 test_write_all(void)
104 {
105 	int fd = ux_socket_connect("/socket");
106 
107 	TEST_ASSERT_TRUE(isGE(fd, 0));
108 
109 	char * str = "TEST123";
110 	int temp = write_all(fd, str,strlen(str));
111 	TEST_ASSERT_EQUAL(strlen(str), temp);
112 
113 	(void)close(fd);
114 	return;
115 }
116 
117 
118 void
test_send_packet(void)119 test_send_packet(void)
120 {
121 	int fd = ux_socket_connect("/socket");
122 
123 	TEST_ASSERT_TRUE(isGE(fd, 0));
124 
125 	char * str2 = "PACKET12345";
126 	int temp = send_packet(fd, str2, strlen(str2));
127 
128 	TEST_ASSERT_EQUAL(0,temp);
129 
130 	(void)close(fd);
131 	return;
132 }
133 
134 
135 /*
136 ** HMS: What's going on here?
137 ** Looks like this needs more work.
138 */
139 void
test_recv_packet(void)140 test_recv_packet(void)
141 {
142 	int fd = ux_socket_connect("/socket");
143 
144 	TEST_ASSERT_TRUE(isGE(fd, 0));
145 
146 	uint32_t size = 256;
147 	char *str = NULL;
148 	int temp = recv_packet(fd, &str, &size);
149 
150 	send_packet(fd, str, strlen(str));
151 	free(str);
152 	TEST_ASSERT_EQUAL(0,temp); //0 because nobody sent us anything (yet!)
153 
154 	(void)close(fd);
155 	return;
156 }
157 
158 void
test_send_via_ntp_signd(void)159 test_send_via_ntp_signd(void)
160 {
161 	struct recvbuf *rbufp = (struct recvbuf *) malloc(sizeof(struct recvbuf));
162 	int	xmode = 1;
163 	keyid_t	xkeyid = 12345;
164 	int	flags = 0;
165 	struct pkt  *xpkt = (struct pkt *) malloc(sizeof(struct pkt)); //defined in ntp.h
166 
167 	TEST_ASSERT_NOT_NULL(rbufp);
168 	TEST_ASSERT_NOT_NULL(xpkt);
169 	memset(xpkt, 0, sizeof(struct pkt));
170 
171 	//send_via_ntp_signd(NULL,NULL,NULL,NULL,NULL);	//doesn't work
172 	/*
173 	** Send the xpkt to Samba, read the response back in rbufp
174 	*/
175 	send_via_ntp_signd(rbufp,xmode,xkeyid,flags,xpkt);
176 
177 	free(rbufp);
178 	free(xpkt);
179 
180 	return;
181 }
182