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