1*d6eebaa4SHervé Poussineau #include "test_pppos.h"
2*d6eebaa4SHervé Poussineau 
3*d6eebaa4SHervé Poussineau #include "lwip/netif.h"
4*d6eebaa4SHervé Poussineau #include "netif/ppp/pppos.h"
5*d6eebaa4SHervé Poussineau #include "netif/ppp/ppp.h"
6*d6eebaa4SHervé Poussineau 
7*d6eebaa4SHervé Poussineau #if PPP_SUPPORT && PPPOS_SUPPORT
8*d6eebaa4SHervé Poussineau static struct netif pppos_netif;
9*d6eebaa4SHervé Poussineau static ppp_pcb *ppp;
10*d6eebaa4SHervé Poussineau 
ppp_output_cb(ppp_pcb * pcb,const void * data,u32_t len,void * ctx)11*d6eebaa4SHervé Poussineau static u32_t ppp_output_cb(ppp_pcb *pcb, const void *data, u32_t len, void *ctx)
12*d6eebaa4SHervé Poussineau {
13*d6eebaa4SHervé Poussineau   LWIP_UNUSED_ARG(pcb);
14*d6eebaa4SHervé Poussineau   LWIP_UNUSED_ARG(data);
15*d6eebaa4SHervé Poussineau   LWIP_UNUSED_ARG(len);
16*d6eebaa4SHervé Poussineau   LWIP_UNUSED_ARG(ctx);
17*d6eebaa4SHervé Poussineau 
18*d6eebaa4SHervé Poussineau   return  0;
19*d6eebaa4SHervé Poussineau }
20*d6eebaa4SHervé Poussineau 
ppp_link_status_cb(ppp_pcb * pcb,int err_code,void * ctx)21*d6eebaa4SHervé Poussineau static void ppp_link_status_cb(ppp_pcb *pcb, int err_code, void *ctx)
22*d6eebaa4SHervé Poussineau {
23*d6eebaa4SHervé Poussineau   LWIP_UNUSED_ARG(pcb);
24*d6eebaa4SHervé Poussineau   LWIP_UNUSED_ARG(err_code);
25*d6eebaa4SHervé Poussineau   LWIP_UNUSED_ARG(ctx);
26*d6eebaa4SHervé Poussineau }
27*d6eebaa4SHervé Poussineau 
pppos_setup(void)28*d6eebaa4SHervé Poussineau static void pppos_setup(void)
29*d6eebaa4SHervé Poussineau {
30*d6eebaa4SHervé Poussineau   ppp = pppos_create(&pppos_netif, ppp_output_cb, ppp_link_status_cb, NULL);
31*d6eebaa4SHervé Poussineau   fail_if(ppp == NULL);
32*d6eebaa4SHervé Poussineau   ppp_connect(ppp, 0);
33*d6eebaa4SHervé Poussineau }
34*d6eebaa4SHervé Poussineau 
pppos_teardown(void)35*d6eebaa4SHervé Poussineau static void pppos_teardown(void)
36*d6eebaa4SHervé Poussineau {
37*d6eebaa4SHervé Poussineau }
38*d6eebaa4SHervé Poussineau 
START_TEST(test_pppos_empty_packet_with_valid_fcs)39*d6eebaa4SHervé Poussineau START_TEST(test_pppos_empty_packet_with_valid_fcs)
40*d6eebaa4SHervé Poussineau {
41*d6eebaa4SHervé Poussineau   u8_t two_breaks[] = { 0x7e, 0, 0, 0x7e };
42*d6eebaa4SHervé Poussineau   u8_t other_packet[] = { 0x7e, 0x7d, 0x20, 0x00, 0x7e };
43*d6eebaa4SHervé Poussineau   /* Set internal states of the underlying pcb */
44*d6eebaa4SHervé Poussineau   pppos_pcb *pppos = (pppos_pcb *)ppp->link_ctx_cb;
45*d6eebaa4SHervé Poussineau 
46*d6eebaa4SHervé Poussineau   LWIP_UNUSED_ARG(_i);
47*d6eebaa4SHervé Poussineau 
48*d6eebaa4SHervé Poussineau   pppos->open = 1;  /* Pretend the connection is open already */
49*d6eebaa4SHervé Poussineau   pppos->in_accm[0] = 0xf0;  /* Make sure 0x0's are not escaped chars */
50*d6eebaa4SHervé Poussineau 
51*d6eebaa4SHervé Poussineau   pppos_input(ppp, two_breaks, sizeof(two_breaks));
52*d6eebaa4SHervé Poussineau   pppos_input(ppp, other_packet, sizeof(other_packet));
53*d6eebaa4SHervé Poussineau 
54*d6eebaa4SHervé Poussineau }
55*d6eebaa4SHervé Poussineau END_TEST
56*d6eebaa4SHervé Poussineau 
57*d6eebaa4SHervé Poussineau /** Create the suite including all tests for this module */
58*d6eebaa4SHervé Poussineau Suite *
pppos_suite(void)59*d6eebaa4SHervé Poussineau pppos_suite(void)
60*d6eebaa4SHervé Poussineau {
61*d6eebaa4SHervé Poussineau   testfunc tests[] = {
62*d6eebaa4SHervé Poussineau     TESTFUNC(test_pppos_empty_packet_with_valid_fcs)
63*d6eebaa4SHervé Poussineau   };
64*d6eebaa4SHervé Poussineau   return create_suite("PPPOS", tests, sizeof(tests)/sizeof(testfunc), pppos_setup, pppos_teardown);
65*d6eebaa4SHervé Poussineau }
66*d6eebaa4SHervé Poussineau 
67*d6eebaa4SHervé Poussineau #endif /* PPP_SUPPORT && PPPOS_SUPPORT */
68