about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorMarc <foxtrot@malloc.me>2021-12-17 18:52:36 +0000
committerMarc <foxtrot@malloc.me>2021-12-17 19:31:25 +0000
commitcd1df65dc36ac35d526de195284d5ebf18e1f92b (patch)
treefc0c163cd9f86d452fec1eb90d48a22d67cf4256
parent8e09d29df19312583747a3de00fe4269c17e6586 (diff)
downloadlibwifi-cd1df65dc36ac35d526de195284d5ebf18e1f92b.tar.gz
libwifi-cd1df65dc36ac35d526de195284d5ebf18e1f92b.tar.bz2
libwifi-cd1df65dc36ac35d526de195284d5ebf18e1f92b.zip
test: Add ctests for generation functions.
This commit also enforces error code checking on functions inside of
the generation functions, such as for `libwifi_quick_add_tag`.
-rw-r--r--.github/workflows/x86_64.yml37
-rw-r--r--src/libwifi/gen/management/assoc_request.c11
-rw-r--r--src/libwifi/gen/management/assoc_response.c19
-rw-r--r--src/libwifi/gen/management/assoc_response.h4
-rw-r--r--src/libwifi/gen/management/authentication.c4
-rw-r--r--src/libwifi/gen/management/authentication.h2
-rw-r--r--src/libwifi/gen/management/beacon.c32
-rw-r--r--src/libwifi/gen/management/beacon.h6
-rw-r--r--src/libwifi/gen/management/disassociation.c4
-rw-r--r--src/libwifi/gen/management/disassociation.h2
-rw-r--r--src/libwifi/gen/management/probe_request.c11
-rw-r--r--src/libwifi/gen/management/probe_request.h2
-rw-r--r--src/libwifi/gen/management/probe_response.c43
-rw-r--r--src/libwifi/gen/management/probe_response.h6
-rw-r--r--src/libwifi/gen/management/reassoc_request.c10
-rw-r--r--src/libwifi/gen/management/reassoc_response.c23
-rw-r--r--src/libwifi/gen/management/reassoc_response.h4
-rw-r--r--src/libwifi/gen/management/timing_ad.c9
-rw-r--r--src/libwifi/gen/management/timing_ad.h2
-rw-r--r--test/CMakeLists.txt71
-rw-r--r--test/README.md69
-rw-r--r--test/src/action_tests.c87
-rw-r--r--test/src/assoc_req_tests.c91
-rw-r--r--test/src/assoc_resp_tests.c91
-rw-r--r--test/src/atim_tests.c35
-rw-r--r--test/src/auth_tests.c91
-rw-r--r--test/src/beacon_tests.c91
-rw-r--r--test/src/deauth_tests.c91
-rw-r--r--test/src/disassoc_tests.c91
-rw-r--r--test/src/probe_req_tests.c91
-rw-r--r--test/src/probe_resp_tests.c91
-rw-r--r--test/src/reassoc_req_tests.c91
-rw-r--r--test/src/reassoc_resp_tests.c91
-rw-r--r--test/src/timing_ad_tests.c57
-rw-r--r--utils/.clang-format (renamed from test/src/.clang-format)0
-rw-r--r--utils/CMakeLists.txt15
-rw-r--r--utils/src/helpers.c (renamed from test/src/helpers.c)0
-rw-r--r--utils/src/helpers.h (renamed from test/src/helpers.h)0
-rw-r--r--utils/src/test_generation.c (renamed from test/src/test_generation.c)0
-rw-r--r--utils/src/test_misc.c (renamed from test/src/test_misc.c)0
-rw-r--r--utils/src/test_parsing.c (renamed from test/src/test_parsing.c)0
41 files changed, 1413 insertions, 62 deletions
diff --git a/.github/workflows/x86_64.yml b/.github/workflows/x86_64.yml index 844a109..cc90e1d 100644 --- a/.github/workflows/x86_64.yml +++ b/.github/workflows/x86_64.yml
@@ -22,6 +22,43 @@ jobs:
22 run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE 22 run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE
23 23
24 - name: Build X86_64 24 - name: Build X86_64
25 shell: bash
26 working-directory: ${{github.workspace}}/build
27 run: cmake --build . --config $BUILD_TYPE
28
29 test:
30 runs-on: ubuntu-latest
31
32 steps:
33 - uses: actions/checkout@v2
34
35 - name: Create Build Environment
36 run: cmake -E make_directory ${{github.workspace}}/build
37
38 - name: Configure CMake
39 shell: bash
25 working-directory: ${{github.workspace}}/build 40 working-directory: ${{github.workspace}}/build
41 run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE
42
43 - name: Build X86_64
26 shell: bash 44 shell: bash
45 working-directory: ${{github.workspace}}/build
27 run: cmake --build . --config $BUILD_TYPE 46 run: cmake --build . --config $BUILD_TYPE
47
48 - name: Create Test Environment
49 run: cmake -E make_directory ${{github.workspace}}/test/build
50
51 - name: Configure CMake
52 shell: bash
53 working-directory: ${{github.workspace}}/test/build
54 run: cmake ${{github.workspace}}/test
55
56 - name: Build Tests
57 shell: bash
58 working-directory: ${{github.workspace}}/test/build
59 run: cmake --build .
60
61 - name: Test X86_64
62 shell: bash
63 working-directory: ${{github.workspace}}/test/build
64 run: ctest --output-on-failure
diff --git a/src/libwifi/gen/management/assoc_request.c b/src/libwifi/gen/management/assoc_request.c index 8ba3585..268b167 100644 --- a/src/libwifi/gen/management/assoc_request.c +++ b/src/libwifi/gen/management/assoc_request.c
@@ -47,8 +47,15 @@ int libwifi_create_assoc_req(struct libwifi_assoc_req *assoc_req, const unsigned
47 assoc_req->fixed_parameters.capabilities_information = BYTESWAP16(LIBWIFI_DEFAULT_AP_CAPABS); 47 assoc_req->fixed_parameters.capabilities_information = BYTESWAP16(LIBWIFI_DEFAULT_AP_CAPABS);
48 assoc_req->fixed_parameters.listen_interval = BYTESWAP16(LIBWIFI_DEFAULT_LISTEN_INTERVAL); 48 assoc_req->fixed_parameters.listen_interval = BYTESWAP16(LIBWIFI_DEFAULT_LISTEN_INTERVAL);
49 49
50 libwifi_quick_add_tag(&assoc_req->tags, TAG_SSID, (const unsigned char *) ssid, strlen(ssid)); 50 int ret = libwifi_quick_add_tag(&assoc_req->tags, TAG_SSID, (const unsigned char *) ssid, strlen(ssid));
51 libwifi_quick_add_tag(&assoc_req->tags, TAG_DS_PARAMETER, (const unsigned char *) &channel, 1); 51 if (ret != 0) {
52 return ret;
53 }
54
55 ret = libwifi_quick_add_tag(&assoc_req->tags, TAG_DS_PARAMETER, (const unsigned char *) &channel, 1);
56 if (ret != 0) {
57 return ret;
58 }
52 59
53 return 0; 60 return 0;
54} 61}
diff --git a/src/libwifi/gen/management/assoc_response.c b/src/libwifi/gen/management/assoc_response.c index be00511..b3077de 100644 --- a/src/libwifi/gen/management/assoc_response.c +++ b/src/libwifi/gen/management/assoc_response.c
@@ -41,21 +41,28 @@ size_t libwifi_get_assoc_resp_length(struct libwifi_assoc_resp *assoc_resp) {
41 * Simple helper function to set the channel of an association response by removing and re-adding the 41 * Simple helper function to set the channel of an association response by removing and re-adding the
42 * DS tagged parameter. 42 * DS tagged parameter.
43 */ 43 */
44void libwifi_set_assoc_resp_channel(struct libwifi_assoc_resp *assoc_resp, uint8_t channel) { 44int libwifi_set_assoc_resp_channel(struct libwifi_assoc_resp *assoc_resp, uint8_t channel) {
45 int ret = 0;
46
45 if (assoc_resp->tags.length != 0) { 47 if (assoc_resp->tags.length != 0) {
46 libwifi_remove_tag(&assoc_resp->tags, TAG_DS_PARAMETER); 48 ret = libwifi_remove_tag(&assoc_resp->tags, TAG_DS_PARAMETER);
49 if (ret != 0) {
50 return ret;
51 }
47 } 52 }
48 53
49 const unsigned char *chan = (const unsigned char *) &channel; 54 const unsigned char *chan = (const unsigned char *) &channel;
50 55
51 libwifi_quick_add_tag(&assoc_resp->tags, TAG_DS_PARAMETER, chan, 1); 56 ret = libwifi_quick_add_tag(&assoc_resp->tags, TAG_DS_PARAMETER, chan, 1);
57
58 return ret;
52} 59}
53 60
54/** 61/**
55 * The generated association response frame is made with sane defaults defined in common.h and core/types.h. 62 * The generated association response frame is made with sane defaults defined in common.h and core/types.h.
56 * Two tagged parameters are also added to the association response: Channel and Supported Rates. 63 * Two tagged parameters are also added to the association response: Channel and Supported Rates.
57 */ 64 */
58void libwifi_create_assoc_resp(struct libwifi_assoc_resp *assoc_resp, const unsigned char receiver[6], 65int libwifi_create_assoc_resp(struct libwifi_assoc_resp *assoc_resp, const unsigned char receiver[6],
59 const unsigned char transmitter[6], uint8_t channel) { 66 const unsigned char transmitter[6], uint8_t channel) {
60 memset(assoc_resp, 0, sizeof(struct libwifi_assoc_resp)); 67 memset(assoc_resp, 0, sizeof(struct libwifi_assoc_resp));
61 68
@@ -71,7 +78,9 @@ void libwifi_create_assoc_resp(struct libwifi_assoc_resp *assoc_resp, const unsi
71 libwifi_set_assoc_resp_channel(assoc_resp, channel); 78 libwifi_set_assoc_resp_channel(assoc_resp, channel);
72 79
73 const unsigned char supported_rates[] = LIBWIFI_DEFAULT_SUPP_RATES; 80 const unsigned char supported_rates[] = LIBWIFI_DEFAULT_SUPP_RATES;
74 libwifi_quick_add_tag(&assoc_resp->tags, TAG_SUPP_RATES, supported_rates, sizeof(supported_rates) - 1); 81 int ret = libwifi_quick_add_tag(&assoc_resp->tags, TAG_SUPP_RATES, supported_rates, sizeof(supported_rates) - 1);
82
83 return ret;
75} 84}
76 85
77/** 86/**
diff --git a/src/libwifi/gen/management/assoc_response.h b/src/libwifi/gen/management/assoc_response.h index 9162d1c..07ad4b4 100644 --- a/src/libwifi/gen/management/assoc_response.h +++ b/src/libwifi/gen/management/assoc_response.h
@@ -24,7 +24,7 @@
24 * @param assoc_resp A libwifi_assoc_resp 24 * @param assoc_resp A libwifi_assoc_resp
25 * @param channel The new channel 25 * @param channel The new channel
26 */ 26 */
27void libwifi_set_assoc_resp_channel(struct libwifi_assoc_resp *assoc_resp, uint8_t channel); 27int libwifi_set_assoc_resp_channel(struct libwifi_assoc_resp *assoc_resp, uint8_t channel);
28 28
29/** 29/**
30 * Calculate the length of a given libwifi_assoc_resp 30 * Calculate the length of a given libwifi_assoc_resp
@@ -46,7 +46,7 @@ size_t libwifi_get_assoc_resp_length(struct libwifi_assoc_resp *assoc_resp);
46 * @param channel The desired channel of the assoc_resp 46 * @param channel The desired channel of the assoc_resp
47 * 47 *
48 */ 48 */
49void libwifi_create_assoc_resp(struct libwifi_assoc_resp *assoc_resp, const unsigned char receiver[6], 49int libwifi_create_assoc_resp(struct libwifi_assoc_resp *assoc_resp, const unsigned char receiver[6],
50 const unsigned char transmitter[6], uint8_t channel); 50 const unsigned char transmitter[6], uint8_t channel);
51 51
52/** 52/**
diff --git a/src/libwifi/gen/management/authentication.c b/src/libwifi/gen/management/authentication.c index 7fcaa22..e8ffea2 100644 --- a/src/libwifi/gen/management/authentication.c +++ b/src/libwifi/gen/management/authentication.c
@@ -32,7 +32,7 @@ size_t libwifi_get_auth_length(struct libwifi_auth *auth) {
32/** 32/**
33 * The generated authentication frame is made with sane defaults defined in common.h. 33 * The generated authentication frame is made with sane defaults defined in common.h.
34 */ 34 */
35void libwifi_create_auth(struct libwifi_auth *auth, const unsigned char receiver[6], 35int libwifi_create_auth(struct libwifi_auth *auth, const unsigned char receiver[6],
36 const unsigned char transmitter[6], uint16_t algorithm_number, 36 const unsigned char transmitter[6], uint16_t algorithm_number,
37 uint16_t transaction_sequence, uint16_t status_code) { 37 uint16_t transaction_sequence, uint16_t status_code) {
38 memset(auth, 0, sizeof(struct libwifi_auth)); 38 memset(auth, 0, sizeof(struct libwifi_auth));
@@ -47,6 +47,8 @@ void libwifi_create_auth(struct libwifi_auth *auth, const unsigned char receiver
47 auth->fixed_parameters.algorithm_number = algorithm_number; 47 auth->fixed_parameters.algorithm_number = algorithm_number;
48 auth->fixed_parameters.transaction_sequence = transaction_sequence; 48 auth->fixed_parameters.transaction_sequence = transaction_sequence;
49 auth->fixed_parameters.status_code = status_code; 49 auth->fixed_parameters.status_code = status_code;
50
51 return 0;
50} 52}
51 53
52/** 54/**
diff --git a/src/libwifi/gen/management/authentication.h b/src/libwifi/gen/management/authentication.h index 4328f95..75e8dcf 100644 --- a/src/libwifi/gen/management/authentication.h +++ b/src/libwifi/gen/management/authentication.h
@@ -40,7 +40,7 @@ size_t libwifi_get_auth_length(struct libwifi_auth *auth);
40 * @param algorithm_number Algorithm type to use 40 * @param algorithm_number Algorithm type to use
41 * 41 *
42 */ 42 */
43void libwifi_create_auth(struct libwifi_auth *auth, const unsigned char receiver[6], 43int libwifi_create_auth(struct libwifi_auth *auth, const unsigned char receiver[6],
44 const unsigned char transmitter[6], uint16_t algorithm_number, 44 const unsigned char transmitter[6], uint16_t algorithm_number,
45 uint16_t transaction_sequence, uint16_t status_code); 45 uint16_t transaction_sequence, uint16_t status_code);
46 46
diff --git a/src/libwifi/gen/management/beacon.c b/src/libwifi/gen/management/beacon.c index 4eb394a..e678fd7 100644 --- a/src/libwifi/gen/management/beacon.c +++ b/src/libwifi/gen/management/beacon.c
@@ -39,32 +39,46 @@ size_t libwifi_get_beacon_length(struct libwifi_beacon *beacon) {
39/** 39/**
40 * Simple helper to set the beacon SSID tag by removing it and then adding it back with the new value. 40 * Simple helper to set the beacon SSID tag by removing it and then adding it back with the new value.
41 */ 41 */
42void libwifi_set_beacon_ssid(struct libwifi_beacon *beacon, const char *ssid) { 42int libwifi_set_beacon_ssid(struct libwifi_beacon *beacon, const char *ssid) {
43 int ret = 0;
44
43 if (beacon->tags.length != 0) { 45 if (beacon->tags.length != 0) {
44 libwifi_remove_tag(&beacon->tags, TAG_SSID); 46 ret = libwifi_remove_tag(&beacon->tags, TAG_SSID);
47 if (ret != 0) {
48 return ret;
49 }
45 } 50 }
46 51
47 libwifi_quick_add_tag(&beacon->tags, TAG_SSID, (void *) ssid, strlen(ssid)); 52 ret = libwifi_quick_add_tag(&beacon->tags, TAG_SSID, (void *) ssid, strlen(ssid));
53
54 return ret;
48} 55}
49 56
50/** 57/**
51 * Simple helper to set the beacon DS tag by removing it and then adding it back with the new value. 58 * Simple helper to set the beacon DS tag by removing it and then adding it back with the new value.
52 */ 59 */
53void libwifi_set_beacon_channel(struct libwifi_beacon *beacon, uint8_t channel) { 60int libwifi_set_beacon_channel(struct libwifi_beacon *beacon, uint8_t channel) {
61 int ret = 0;
62
54 if (beacon->tags.length != 0) { 63 if (beacon->tags.length != 0) {
55 libwifi_remove_tag(&beacon->tags, TAG_DS_PARAMETER); 64 ret = libwifi_remove_tag(&beacon->tags, TAG_DS_PARAMETER);
65 if (ret != 0) {
66 return ret;
67 }
56 } 68 }
57 69
58 const unsigned char *chan = (const unsigned char *) &channel; 70 const unsigned char *chan = (const unsigned char *) &channel;
59 71
60 libwifi_quick_add_tag(&beacon->tags, TAG_DS_PARAMETER, chan, 1); 72 ret = libwifi_quick_add_tag(&beacon->tags, TAG_DS_PARAMETER, chan, 1);
73
74 return ret;
61} 75}
62 76
63/** 77/**
64 * The generated beacon frame is made with sane defaults defined in common.h. 78 * The generated beacon frame is made with sane defaults defined in common.h.
65 * Three tagged parameters are also added to the beacon: SSID, Channel and Supported Rates. 79 * Three tagged parameters are also added to the beacon: SSID, Channel and Supported Rates.
66 */ 80 */
67void libwifi_create_beacon(struct libwifi_beacon *beacon, const unsigned char receiver[6], 81int libwifi_create_beacon(struct libwifi_beacon *beacon, const unsigned char receiver[6],
68 const unsigned char transmitter[6], const char *ssid, uint8_t channel) { 82 const unsigned char transmitter[6], const char *ssid, uint8_t channel) {
69 memset(beacon, 0, sizeof(struct libwifi_beacon)); 83 memset(beacon, 0, sizeof(struct libwifi_beacon));
70 84
@@ -82,7 +96,9 @@ void libwifi_create_beacon(struct libwifi_beacon *beacon, const unsigned char re
82 libwifi_set_beacon_channel(beacon, channel); 96 libwifi_set_beacon_channel(beacon, channel);
83 97
84 const unsigned char supported_rates[] = LIBWIFI_DEFAULT_SUPP_RATES; 98 const unsigned char supported_rates[] = LIBWIFI_DEFAULT_SUPP_RATES;
85 libwifi_quick_add_tag(&beacon->tags, TAG_SUPP_RATES, supported_rates, sizeof(supported_rates) - 1); 99 int ret = libwifi_quick_add_tag(&beacon->tags, TAG_SUPP_RATES, supported_rates, sizeof(supported_rates) - 1);
100
101 return ret;
86} 102}
87 103
88/** 104/**
diff --git a/src/libwifi/gen/management/beacon.h b/src/libwifi/gen/management/beacon.h index 3da342b..971df88 100644 --- a/src/libwifi/gen/management/beacon.h +++ b/src/libwifi/gen/management/beacon.h
@@ -24,7 +24,7 @@
24 * @param beacon A struct libwifi_beacon 24 * @param beacon A struct libwifi_beacon
25 * @param ssid The new SSID 25 * @param ssid The new SSID
26 */ 26 */
27void libwifi_set_beacon_ssid(struct libwifi_beacon *beacon, const char *ssid); 27int libwifi_set_beacon_ssid(struct libwifi_beacon *beacon, const char *ssid);
28 28
29/** 29/**
30 * Set the channel of a struct libwifi_beacon. 30 * Set the channel of a struct libwifi_beacon.
@@ -32,7 +32,7 @@ void libwifi_set_beacon_ssid(struct libwifi_beacon *beacon, const char *ssid);
32 * @param beacon A struct libwifi_beacon 32 * @param beacon A struct libwifi_beacon
33 * @param channel The new channel 33 * @param channel The new channel
34 */ 34 */
35void libwifi_set_beacon_channel(struct libwifi_beacon *beacon, uint8_t channel); 35int libwifi_set_beacon_channel(struct libwifi_beacon *beacon, uint8_t channel);
36 36
37/** 37/**
38 * Calculate the length of a given struct libwifi_beacon 38 * Calculate the length of a given struct libwifi_beacon
@@ -55,7 +55,7 @@ size_t libwifi_get_beacon_length(struct libwifi_beacon *beacon);
55 * @param channel The desired channel of the beacon 55 * @param channel The desired channel of the beacon
56 * 56 *
57 */ 57 */
58void libwifi_create_beacon(struct libwifi_beacon *beacon, const unsigned char receiver[6], 58int libwifi_create_beacon(struct libwifi_beacon *beacon, const unsigned char receiver[6],
59 const unsigned char transmitter[6], const char *ssid, uint8_t channel); 59 const unsigned char transmitter[6], const char *ssid, uint8_t channel);
60 60
61/** 61/**
diff --git a/src/libwifi/gen/management/disassociation.c b/src/libwifi/gen/management/disassociation.c index a885efd..d6cf237 100644 --- a/src/libwifi/gen/management/disassociation.c +++ b/src/libwifi/gen/management/disassociation.c
@@ -33,7 +33,7 @@ size_t libwifi_get_disassoc_length(struct libwifi_disassoc *disassoc) {
33 * The generated disassociation frame contains only the supplied receiver, transmitter and reason_code by 33 * The generated disassociation frame contains only the supplied receiver, transmitter and reason_code by
34 * default. 34 * default.
35 */ 35 */
36void libwifi_create_disassoc(struct libwifi_disassoc *disassoc, const unsigned char receiver[6], 36int libwifi_create_disassoc(struct libwifi_disassoc *disassoc, const unsigned char receiver[6],
37 const unsigned char transmitter[6], uint16_t reason_code) { 37 const unsigned char transmitter[6], uint16_t reason_code) {
38 memset(disassoc, 0, sizeof(struct libwifi_disassoc)); 38 memset(disassoc, 0, sizeof(struct libwifi_disassoc));
39 39
@@ -46,6 +46,8 @@ void libwifi_create_disassoc(struct libwifi_disassoc *disassoc, const unsigned c
46 disassoc->frame_header.seq_control.sequence_number = (rand() % 4096); 46 disassoc->frame_header.seq_control.sequence_number = (rand() % 4096);
47 47
48 memcpy(&disassoc->fixed_parameters.reason_code, &reason_code, sizeof(reason_code)); 48 memcpy(&disassoc->fixed_parameters.reason_code, &reason_code, sizeof(reason_code));
49
50 return 0;
49} 51}
50 52
51/** 53/**
diff --git a/src/libwifi/gen/management/disassociation.h b/src/libwifi/gen/management/disassociation.h index fada9f0..10f1db9 100644 --- a/src/libwifi/gen/management/disassociation.h +++ b/src/libwifi/gen/management/disassociation.h
@@ -40,7 +40,7 @@ size_t libwifi_get_disassoc_length(struct libwifi_disassoc *disassoc);
40 * @param reason_code The disassoc reason code 40 * @param reason_code The disassoc reason code
41 * 41 *
42 */ 42 */
43void libwifi_create_disassoc(struct libwifi_disassoc *disassoc, const unsigned char receiver[6], 43int libwifi_create_disassoc(struct libwifi_disassoc *disassoc, const unsigned char receiver[6],
44 const unsigned char transmitter[6], uint16_t reason_code); 44 const unsigned char transmitter[6], uint16_t reason_code);
45 45
46/** 46/**
diff --git a/src/libwifi/gen/management/probe_request.c b/src/libwifi/gen/management/probe_request.c index 7c5b99e..95cdcdb 100644 --- a/src/libwifi/gen/management/probe_request.c +++ b/src/libwifi/gen/management/probe_request.c
@@ -31,7 +31,7 @@ size_t libwifi_get_probe_req_length(struct libwifi_probe_req *probe_req) {
31 * The generated probe request frame is made with sane defaults defined in common.h. 31 * The generated probe request frame is made with sane defaults defined in common.h.
32 * Two tagged parameters are also added to the beacon: SSID and Channel. 32 * Two tagged parameters are also added to the beacon: SSID and Channel.
33 */ 33 */
34void libwifi_create_probe_req(struct libwifi_probe_req *probe_req, const unsigned char receiver[6], 34int libwifi_create_probe_req(struct libwifi_probe_req *probe_req, const unsigned char receiver[6],
35 const unsigned char transmitter[6], const unsigned char bssid[6], 35 const unsigned char transmitter[6], const unsigned char bssid[6],
36 const char *ssid, uint8_t channel) { 36 const char *ssid, uint8_t channel) {
37 memset(probe_req, 0, sizeof(struct libwifi_probe_req)); 37 memset(probe_req, 0, sizeof(struct libwifi_probe_req));
@@ -43,8 +43,13 @@ void libwifi_create_probe_req(struct libwifi_probe_req *probe_req, const unsigne
43 memcpy(&probe_req->frame_header.addr3, bssid, 6); 43 memcpy(&probe_req->frame_header.addr3, bssid, 6);
44 probe_req->frame_header.seq_control.sequence_number = (rand() % 4096); 44 probe_req->frame_header.seq_control.sequence_number = (rand() % 4096);
45 45
46 libwifi_quick_add_tag(&probe_req->tags, TAG_SSID, (const unsigned char *) ssid, strlen(ssid)); 46 int ret = libwifi_quick_add_tag(&probe_req->tags, TAG_SSID, (const unsigned char *) ssid, strlen(ssid));
47 libwifi_quick_add_tag(&probe_req->tags, TAG_DS_PARAMETER, (const unsigned char *) &channel, 1); 47 if (ret != 0) {
48 return ret;
49 }
50
51 ret = libwifi_quick_add_tag(&probe_req->tags, TAG_DS_PARAMETER, (const unsigned char *) &channel, 1);
52 return ret;
48} 53}
49 54
50/** 55/**
diff --git a/src/libwifi/gen/management/probe_request.h b/src/libwifi/gen/management/probe_request.h index f98b70a..c71897b 100644 --- a/src/libwifi/gen/management/probe_request.h +++ b/src/libwifi/gen/management/probe_request.h
@@ -40,7 +40,7 @@ size_t libwifi_get_probe_req_length(struct libwifi_probe_req *probe_req);
40 * @param reason_code The probe_req reason code 40 * @param reason_code The probe_req reason code
41 * 41 *
42 */ 42 */
43void libwifi_create_probe_req(struct libwifi_probe_req *probe_req, const unsigned char receiver[6], 43int libwifi_create_probe_req(struct libwifi_probe_req *probe_req, const unsigned char receiver[6],
44 const unsigned char transmitter[6], const unsigned char bssid[6], 44 const unsigned char transmitter[6], const unsigned char bssid[6],
45 const char *ssid, uint8_t channel); 45 const char *ssid, uint8_t channel);
46 46
diff --git a/src/libwifi/gen/management/probe_response.c b/src/libwifi/gen/management/probe_response.c index 403a8bc..1528313 100644 --- a/src/libwifi/gen/management/probe_response.c +++ b/src/libwifi/gen/management/probe_response.c
@@ -39,32 +39,46 @@ size_t libwifi_get_probe_resp_length(struct libwifi_probe_resp *probe_resp) {
39/** 39/**
40 * Simple helper to set the probe response SSID tag by removing it and then adding it back with the new value. 40 * Simple helper to set the probe response SSID tag by removing it and then adding it back with the new value.
41 */ 41 */
42void libwifi_set_probe_resp_ssid(struct libwifi_probe_resp *probe_resp, const char *ssid) { 42int libwifi_set_probe_resp_ssid(struct libwifi_probe_resp *probe_resp, const char *ssid) {
43 int ret = 0;
44
43 if (probe_resp->tags.length != 0) { 45 if (probe_resp->tags.length != 0) {
44 libwifi_remove_tag(&probe_resp->tags, TAG_SSID); 46 ret = libwifi_remove_tag(&probe_resp->tags, TAG_SSID);
47 if (ret != 0) {
48 return ret;
49 }
45 } 50 }
46 51
47 libwifi_quick_add_tag(&probe_resp->tags, TAG_SSID, (void *) ssid, strlen(ssid)); 52 ret = libwifi_quick_add_tag(&probe_resp->tags, TAG_SSID, (void *) ssid, strlen(ssid));
53
54 return ret;
48} 55}
49 56
50/** 57/**
51 * Simple helper to set the probe response DS tag by removing it and then adding it back with the new value. 58 * Simple helper to set the probe response DS tag by removing it and then adding it back with the new value.
52 */ 59 */
53void libwifi_set_probe_resp_channel(struct libwifi_probe_resp *probe_resp, uint8_t channel) { 60int libwifi_set_probe_resp_channel(struct libwifi_probe_resp *probe_resp, uint8_t channel) {
61 int ret = 0;
62
54 if (probe_resp->tags.length != 0) { 63 if (probe_resp->tags.length != 0) {
55 libwifi_remove_tag(&probe_resp->tags, TAG_DS_PARAMETER); 64 ret = libwifi_remove_tag(&probe_resp->tags, TAG_DS_PARAMETER);
65 if (ret != 0) {
66 return ret;
67 }
56 } 68 }
57 69
58 const unsigned char *chan = (const unsigned char *) &channel; 70 const unsigned char *chan = (const unsigned char *) &channel;
59 71
60 libwifi_quick_add_tag(&probe_resp->tags, TAG_DS_PARAMETER, chan, 1); 72 ret = libwifi_quick_add_tag(&probe_resp->tags, TAG_DS_PARAMETER, chan, 1);
73
74 return ret;
61} 75}
62 76
63/** 77/**
64 * The generated probe response frame is made with sane defaults defined in common.h. 78 * The generated probe response frame is made with sane defaults defined in common.h.
65 * Three tagged parameters are also added to the probe response: SSID, Channel and Supported Rates. 79 * Three tagged parameters are also added to the probe response: SSID, Channel and Supported Rates.
66 */ 80 */
67void libwifi_create_probe_resp(struct libwifi_probe_resp *probe_resp, const unsigned char receiver[6], 81int libwifi_create_probe_resp(struct libwifi_probe_resp *probe_resp, const unsigned char receiver[6],
68 const unsigned char transmitter[6], const char *ssid, uint8_t channel) { 82 const unsigned char transmitter[6], const char *ssid, uint8_t channel) {
69 memset(probe_resp, 0, sizeof(struct libwifi_probe_resp)); 83 memset(probe_resp, 0, sizeof(struct libwifi_probe_resp));
70 84
@@ -79,11 +93,20 @@ void libwifi_create_probe_resp(struct libwifi_probe_resp *probe_resp, const unsi
79 probe_resp->fixed_parameters.probe_resp_interval = BYTESWAP16(probe_resp_interval); 93 probe_resp->fixed_parameters.probe_resp_interval = BYTESWAP16(probe_resp_interval);
80 probe_resp->fixed_parameters.capabilities_information = BYTESWAP16(LIBWIFI_DEFAULT_AP_CAPABS); 94 probe_resp->fixed_parameters.capabilities_information = BYTESWAP16(LIBWIFI_DEFAULT_AP_CAPABS);
81 95
82 libwifi_set_probe_resp_ssid(probe_resp, ssid); 96 int ret = libwifi_set_probe_resp_ssid(probe_resp, ssid);
83 libwifi_set_probe_resp_channel(probe_resp, channel); 97 if (ret != 0) {
98 return ret;
99 }
100
101 ret = libwifi_set_probe_resp_channel(probe_resp, channel);
102 if (ret != 0) {
103 return ret;
104 }
84 105
85 const unsigned char supported_rates[] = LIBWIFI_DEFAULT_SUPP_RATES; 106 const unsigned char supported_rates[] = LIBWIFI_DEFAULT_SUPP_RATES;
86 libwifi_quick_add_tag(&probe_resp->tags, TAG_SUPP_RATES, supported_rates, sizeof(supported_rates) - 1); 107 ret = libwifi_quick_add_tag(&probe_resp->tags, TAG_SUPP_RATES, supported_rates, sizeof(supported_rates) - 1);
108
109 return ret;
87} 110}
88 111
89/** 112/**
diff --git a/src/libwifi/gen/management/probe_response.h b/src/libwifi/gen/management/probe_response.h index 56243ee..80f5451 100644 --- a/src/libwifi/gen/management/probe_response.h +++ b/src/libwifi/gen/management/probe_response.h
@@ -24,7 +24,7 @@
24 * @param probe_resp A libwifi_probe_resp 24 * @param probe_resp A libwifi_probe_resp
25 * @param ssid The new SSID 25 * @param ssid The new SSID
26 */ 26 */
27void libwifi_set_probe_resp_ssid(struct libwifi_probe_resp *probe_resp, const char *ssid); 27int libwifi_set_probe_resp_ssid(struct libwifi_probe_resp *probe_resp, const char *ssid);
28 28
29/** 29/**
30 * Set the channel of a libwifi_probe_resp. 30 * Set the channel of a libwifi_probe_resp.
@@ -32,7 +32,7 @@ void libwifi_set_probe_resp_ssid(struct libwifi_probe_resp *probe_resp, const ch
32 * @param probe_resp A libwifi_probe_resp 32 * @param probe_resp A libwifi_probe_resp
33 * @param channel The new channel 33 * @param channel The new channel
34 */ 34 */
35void libwifi_set_probe_resp_channel(struct libwifi_probe_resp *probe_resp, uint8_t channel); 35int libwifi_set_probe_resp_channel(struct libwifi_probe_resp *probe_resp, uint8_t channel);
36 36
37/** 37/**
38 * Calculate the length of a given libwifi_probe_resp 38 * Calculate the length of a given libwifi_probe_resp
@@ -55,7 +55,7 @@ size_t libwifi_get_probe_resp_length(struct libwifi_probe_resp *probe_resp);
55 * @param channel The desired channel of the probe_resp 55 * @param channel The desired channel of the probe_resp
56 * 56 *
57 */ 57 */
58void libwifi_create_probe_resp(struct libwifi_probe_resp *probe_resp, const unsigned char receiver[6], 58int libwifi_create_probe_resp(struct libwifi_probe_resp *probe_resp, const unsigned char receiver[6],
59 const unsigned char transmitter[6], const char *ssid, uint8_t channel); 59 const unsigned char transmitter[6], const char *ssid, uint8_t channel);
60 60
61/** 61/**
diff --git a/src/libwifi/gen/management/reassoc_request.c b/src/libwifi/gen/management/reassoc_request.c index f678caf..9e9bcd8 100644 --- a/src/libwifi/gen/management/reassoc_request.c +++ b/src/libwifi/gen/management/reassoc_request.c
@@ -49,10 +49,14 @@ int libwifi_create_reassoc_req(struct libwifi_reassoc_req *reassoc_req, const un
49 reassoc_req->fixed_parameters.listen_interval = BYTESWAP16(LIBWIFI_DEFAULT_LISTEN_INTERVAL); 49 reassoc_req->fixed_parameters.listen_interval = BYTESWAP16(LIBWIFI_DEFAULT_LISTEN_INTERVAL);
50 memcpy(&reassoc_req->fixed_parameters.current_ap_address, current_ap, 6); 50 memcpy(&reassoc_req->fixed_parameters.current_ap_address, current_ap, 6);
51 51
52 libwifi_quick_add_tag(&reassoc_req->tags, TAG_SSID, (const unsigned char *) ssid, strlen(ssid)); 52 int ret = libwifi_quick_add_tag(&reassoc_req->tags, TAG_SSID, (const unsigned char *) ssid, strlen(ssid));
53 libwifi_quick_add_tag(&reassoc_req->tags, TAG_DS_PARAMETER, (const unsigned char *) &channel, 1); 53 if (ret != 0) {
54 return ret;
55 }
56
57 ret = libwifi_quick_add_tag(&reassoc_req->tags, TAG_DS_PARAMETER, (const unsigned char *) &channel, 1);
54 58
55 return 0; 59 return ret;
56} 60}
57 61
58/** 62/**
diff --git a/src/libwifi/gen/management/reassoc_response.c b/src/libwifi/gen/management/reassoc_response.c index b9acbb6..3279f52 100644 --- a/src/libwifi/gen/management/reassoc_response.c +++ b/src/libwifi/gen/management/reassoc_response.c
@@ -41,21 +41,27 @@ size_t libwifi_get_reassoc_resp_length(struct libwifi_reassoc_resp *reassoc_resp
41 * Simple helper to set the reassociation response DS tag by removing it and then adding it back with the new 41 * Simple helper to set the reassociation response DS tag by removing it and then adding it back with the new
42 * value. 42 * value.
43 */ 43 */
44void libwifi_set_reassoc_resp_channel(struct libwifi_reassoc_resp *reassoc_resp, uint8_t channel) { 44int libwifi_set_reassoc_resp_channel(struct libwifi_reassoc_resp *reassoc_resp, uint8_t channel) {
45 int ret = 0;
46
45 if (reassoc_resp->tags.length != 0) { 47 if (reassoc_resp->tags.length != 0) {
46 libwifi_remove_tag(&reassoc_resp->tags, TAG_DS_PARAMETER); 48 ret = libwifi_remove_tag(&reassoc_resp->tags, TAG_DS_PARAMETER);
49 if (ret != 0) {
50 return ret;
51 }
47 } 52 }
48 53
49 const unsigned char *chan = (const unsigned char *) &channel; 54 const unsigned char *chan = (const unsigned char *) &channel;
55 ret = libwifi_quick_add_tag(&reassoc_resp->tags, TAG_DS_PARAMETER, chan, 1);
50 56
51 libwifi_quick_add_tag(&reassoc_resp->tags, TAG_DS_PARAMETER, chan, 1); 57 return ret;
52} 58}
53 59
54/** 60/**
55 * The generated reassoc_resp frame is made with sane defaults defined in common.h. 61 * The generated reassoc_resp frame is made with sane defaults defined in common.h.
56 * Three tagged parameters are also added to the reassoc_resp: SSID, Channel and Supported Rates. 62 * Three tagged parameters are also added to the reassoc_resp: SSID, Channel and Supported Rates.
57 */ 63 */
58void libwifi_create_reassoc_resp(struct libwifi_reassoc_resp *reassoc_resp, const unsigned char receiver[6], 64int libwifi_create_reassoc_resp(struct libwifi_reassoc_resp *reassoc_resp, const unsigned char receiver[6],
59 const unsigned char transmitter[6], uint8_t channel) { 65 const unsigned char transmitter[6], uint8_t channel) {
60 memset(reassoc_resp, 0, sizeof(struct libwifi_reassoc_resp)); 66 memset(reassoc_resp, 0, sizeof(struct libwifi_reassoc_resp));
61 67
@@ -68,10 +74,15 @@ void libwifi_create_reassoc_resp(struct libwifi_reassoc_resp *reassoc_resp, cons
68 reassoc_resp->fixed_parameters.status_code = STATUS_SUCCESS; 74 reassoc_resp->fixed_parameters.status_code = STATUS_SUCCESS;
69 reassoc_resp->fixed_parameters.association_id = rand() % 4096; 75 reassoc_resp->fixed_parameters.association_id = rand() % 4096;
70 76
71 libwifi_set_reassoc_resp_channel(reassoc_resp, channel); 77 int ret = libwifi_set_reassoc_resp_channel(reassoc_resp, channel);
78 if (ret != 0) {
79 return ret;
80 }
72 81
73 const unsigned char supported_rates[] = LIBWIFI_DEFAULT_SUPP_RATES; 82 const unsigned char supported_rates[] = LIBWIFI_DEFAULT_SUPP_RATES;
74 libwifi_quick_add_tag(&reassoc_resp->tags, TAG_SUPP_RATES, supported_rates, sizeof(supported_rates) - 1); 83 ret = libwifi_quick_add_tag(&reassoc_resp->tags, TAG_SUPP_RATES, supported_rates, sizeof(supported_rates) - 1);
84
85 return ret;
75} 86}
76 87
77/** 88/**
diff --git a/src/libwifi/gen/management/reassoc_response.h b/src/libwifi/gen/management/reassoc_response.h index f0a2da2..420ed66 100644 --- a/src/libwifi/gen/management/reassoc_response.h +++ b/src/libwifi/gen/management/reassoc_response.h
@@ -24,7 +24,7 @@
24 * @param reassoc_resp A libwifi_reassoc_resp 24 * @param reassoc_resp A libwifi_reassoc_resp
25 * @param channel The new channel 25 * @param channel The new channel
26 */ 26 */
27void libwifi_set_reassoc_resp_channel(struct libwifi_reassoc_resp *reassoc_resp, uint8_t channel); 27int libwifi_set_reassoc_resp_channel(struct libwifi_reassoc_resp *reassoc_resp, uint8_t channel);
28 28
29/** 29/**
30 * Calculate the length of a given libwifi_reassoc_resp 30 * Calculate the length of a given libwifi_reassoc_resp
@@ -46,7 +46,7 @@ size_t libwifi_get_reassoc_resp_length(struct libwifi_reassoc_resp *reassoc_resp
46 * @param channel The desired channel of the reassoc_resp 46 * @param channel The desired channel of the reassoc_resp
47 * 47 *
48 */ 48 */
49void libwifi_create_reassoc_resp(struct libwifi_reassoc_resp *reassoc_resp, const unsigned char receiver[6], 49int libwifi_create_reassoc_resp(struct libwifi_reassoc_resp *reassoc_resp, const unsigned char receiver[6],
50 const unsigned char transmitter[6], uint8_t channel); 50 const unsigned char transmitter[6], uint8_t channel);
51 51
52/** 52/**
diff --git a/src/libwifi/gen/management/timing_ad.c b/src/libwifi/gen/management/timing_ad.c index 6e67a6b..61b9003 100644 --- a/src/libwifi/gen/management/timing_ad.c +++ b/src/libwifi/gen/management/timing_ad.c
@@ -19,10 +19,11 @@
19#include "../../core/misc/epoch.h" 19#include "../../core/misc/epoch.h"
20#include "../../core/frame/tag.h" 20#include "../../core/frame/tag.h"
21 21
22#include <errno.h>
22#include <stdlib.h> 23#include <stdlib.h>
23#include <string.h> 24#include <string.h>
24 25
25void libwifi_create_timing_advert(struct libwifi_timing_advert *adv, const unsigned char destination[6], 26int libwifi_create_timing_advert(struct libwifi_timing_advert *adv, const unsigned char destination[6],
26 const unsigned char transmitter[6], struct libwifi_timing_advert_fields *adv_fields, 27 const unsigned char transmitter[6], struct libwifi_timing_advert_fields *adv_fields,
27 const char country[3], uint16_t max_reg_power, uint8_t max_tx_power, uint8_t tx_power_used, 28 const char country[3], uint16_t max_reg_power, uint8_t max_tx_power, uint8_t tx_power_used,
28 uint8_t noise_floor) { 29 uint8_t noise_floor) {
@@ -45,7 +46,7 @@ void libwifi_create_timing_advert(struct libwifi_timing_advert *adv, const unsig
45 adv->fixed_parameters.noise_floor = noise_floor; 46 adv->fixed_parameters.noise_floor = noise_floor;
46 47
47 if (adv_fields == NULL) { 48 if (adv_fields == NULL) {
48 return; 49 return -EINVAL;
49 } 50 }
50 51
51 // Maximum element size is 17 52 // Maximum element size is 17
@@ -78,7 +79,9 @@ void libwifi_create_timing_advert(struct libwifi_timing_advert *adv, const unsig
78 79
79 element_data_len = offset; 80 element_data_len = offset;
80 81
81 libwifi_quick_add_tag(&adv->tags, TAG_TIME_ADVERTISEMENT, element_data, element_data_len); 82 int ret = libwifi_quick_add_tag(&adv->tags, TAG_TIME_ADVERTISEMENT, element_data, element_data_len);
83
84 return ret;
82} 85}
83 86
84size_t libwifi_get_timing_advert_length(struct libwifi_timing_advert *adv) { 87size_t libwifi_get_timing_advert_length(struct libwifi_timing_advert *adv) {
diff --git a/src/libwifi/gen/management/timing_ad.h b/src/libwifi/gen/management/timing_ad.h index cdcb827..51c7729 100644 --- a/src/libwifi/gen/management/timing_ad.h +++ b/src/libwifi/gen/management/timing_ad.h
@@ -18,7 +18,7 @@
18 18
19#include "../../core/frame/management/timing_ad.h" 19#include "../../core/frame/management/timing_ad.h"
20 20
21void libwifi_create_timing_advert(struct libwifi_timing_advert *adv, const unsigned char destination[6], 21int libwifi_create_timing_advert(struct libwifi_timing_advert *adv, const unsigned char destination[6],
22 const unsigned char transmitter[6], struct libwifi_timing_advert_fields *adv_fields, 22 const unsigned char transmitter[6], struct libwifi_timing_advert_fields *adv_fields,
23 const char country[3], uint16_t max_reg_power, uint8_t max_tx_power, uint8_t tx_power_used, 23 const char country[3], uint16_t max_reg_power, uint8_t max_tx_power, uint8_t tx_power_used,
24 uint8_t noise_floor); 24 uint8_t noise_floor);
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b418f93..32934a5 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt
@@ -7,10 +7,69 @@ set(CMAKE_CXX_STANDARD_REQUIRED True)
7 7
8set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ggdb -O0") 8set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ggdb -O0")
9 9
10add_executable(test_misc src/helpers.c src/test_misc.c) 10link_directories("../build/")
11add_executable(test_generation src/helpers.c src/test_generation.c)
12add_executable(test_parsing src/helpers.c src/test_parsing.c)
13 11
14target_link_libraries(test_misc wifi) 12add_executable(action_tests src/action_tests.c)
15target_link_libraries(test_generation wifi pcap) 13target_link_libraries(action_tests wifi)
16target_link_libraries(test_parsing wifi pcap) 14add_executable(assoc_req_tests src/assoc_req_tests.c)
15target_link_libraries(assoc_req_tests wifi)
16add_executable(assoc_resp_tests src/assoc_resp_tests.c)
17target_link_libraries(assoc_resp_tests wifi)
18add_executable(atim_tests src/atim_tests.c)
19target_link_libraries(atim_tests wifi)
20add_executable(auth_tests src/auth_tests.c)
21target_link_libraries(auth_tests wifi)
22add_executable(beacon_tests src/beacon_tests.c)
23target_link_libraries(beacon_tests wifi)
24add_executable(deauth_tests src/deauth_tests.c)
25target_link_libraries(deauth_tests wifi)
26add_executable(disassoc_tests src/disassoc_tests.c)
27target_link_libraries(disassoc_tests wifi)
28add_executable(probe_req_tests src/probe_req_tests.c)
29target_link_libraries(probe_req_tests wifi)
30add_executable(probe_resp_tests src/probe_resp_tests.c)
31target_link_libraries(probe_resp_tests wifi)
32add_executable(reassoc_req_tests src/reassoc_req_tests.c)
33target_link_libraries(reassoc_req_tests wifi)
34add_executable(reassoc_resp_tests src/reassoc_resp_tests.c)
35target_link_libraries(reassoc_resp_tests wifi)
36add_executable(timing_ad_tests src/timing_ad_tests.c)
37target_link_libraries(timing_ad_tests wifi)
38
39enable_testing()
40add_test(NAME test_action_gen_full COMMAND action_tests --action-gen-full)
41add_test(NAME test_action_gen_details COMMAND action_tests --action-gen-details)
42
43add_test(NAME test_assoc_req_gen_full COMMAND assoc_req_tests --assoc_req-gen-full)
44add_test(NAME test_assoc_req_gen_tags COMMAND assoc_req_tests --assoc_req-gen-tags)
45
46add_test(NAME test_assoc_resp_gen_full COMMAND assoc_resp_tests --assoc_resp-gen-full)
47add_test(NAME test_assoc_resp_gen_tags COMMAND assoc_resp_tests --assoc_resp-gen-tags)
48
49add_test(NAME test_atim_gen_full COMMAND atim_tests --atim-gen-full)
50
51add_test(NAME test_auth_gen_full COMMAND auth_tests --auth-gen-full)
52add_test(NAME test_auth_gen_tags COMMAND auth_tests --auth-gen-tags)
53
54add_test(NAME test_beacon_gen_full COMMAND beacon_tests --beacon-gen-full)
55add_test(NAME test_beacon_gen_tags COMMAND beacon_tests --beacon-gen-tags)
56
57add_test(NAME test_deauth_gen_full COMMAND deauth_tests --deauth-gen-full)
58add_test(NAME test_deauth_gen_tags COMMAND deauth_tests --deauth-gen-tags)
59
60add_test(NAME test_disassoc_gen_full COMMAND disassoc_tests --disassoc-gen-full)
61add_test(NAME test_disassoc_gen_tags COMMAND disassoc_tests --disassoc-gen-tags)
62
63add_test(NAME test_probe_req_gen_full COMMAND probe_req_tests --probe_req-gen-full)
64add_test(NAME test_probe_req_gen_tags COMMAND probe_req_tests --probe_req-gen-tags)
65
66add_test(NAME test_probe_resp_gen_full COMMAND probe_resp_tests --probe_resp-gen-full)
67add_test(NAME test_probe_resp_gen_tags COMMAND probe_resp_tests --probe_resp-gen-tags)
68
69add_test(NAME test_reassoc_req_gen_full COMMAND reassoc_req_tests --reassoc_req-gen-full)
70add_test(NAME test_reassoc_req_gen_tags COMMAND reassoc_req_tests --reassoc_req-gen-tags)
71
72add_test(NAME test_reassoc_resp_gen_full COMMAND reassoc_resp_tests --reassoc_resp-gen-full)
73add_test(NAME test_reassoc_resp_gen_tags COMMAND reassoc_resp_tests --reassoc_resp-gen-tags)
74
75add_test(NAME test_timing_ad_gen_tags COMMAND timing_ad_tests --timing_ad-gen-full)
diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000..402fa87 --- /dev/null +++ b/test/README.md
@@ -0,0 +1,69 @@
1# libwifi Tests
2libwifi uses CMakes testing functionalities. The tests are in the `src/` directory, and can be used with `make test`.
3
4## Running Tests
5```
6>> mkdir build
7>> cd build
8>> cmake ..
9>> make && make test
10```
11
12## Expected Output
13```
14>> make test
15Running tests...
16Test project libwifi/test/build
17 Start 1: test_action_gen_full
18 1/24 Test #1: test_action_gen_full ............. Passed 0.00 sec
19 Start 2: test_action_gen_details
20 2/24 Test #2: test_action_gen_details .......... Passed 0.00 sec
21 Start 3: test_assoc_req_gen_full
22 3/24 Test #3: test_assoc_req_gen_full .......... Passed 0.00 sec
23 Start 4: test_assoc_req_gen_tags
24 4/24 Test #4: test_assoc_req_gen_tags .......... Passed 0.00 sec
25 Start 5: test_assoc_resp_gen_full
26 5/24 Test #5: test_assoc_resp_gen_full ......... Passed 0.00 sec
27 Start 6: test_assoc_resp_gen_tags
28 6/24 Test #6: test_assoc_resp_gen_tags ......... Passed 0.00 sec
29 Start 7: test_atim_gen_full
30 7/24 Test #7: test_atim_gen_full ............... Passed 0.00 sec
31 Start 8: test_auth_gen_full
32 8/24 Test #8: test_auth_gen_full ............... Passed 0.00 sec
33 Start 9: test_auth_gen_tags
34 9/24 Test #9: test_auth_gen_tags ............... Passed 0.00 sec
35 Start 10: test_beacon_gen_full
3610/24 Test #10: test_beacon_gen_full ............. Passed 0.00 sec
37 Start 11: test_beacon_gen_tags
3811/24 Test #11: test_beacon_gen_tags ............. Passed 0.00 sec
39 Start 12: test_deauth_gen_full
4012/24 Test #12: test_deauth_gen_full ............. Passed 0.00 sec
41 Start 13: test_deauth_gen_tags
4213/24 Test #13: test_deauth_gen_tags ............. Passed 0.00 sec
43 Start 14: test_disassoc_gen_full
4414/24 Test #14: test_disassoc_gen_full ........... Passed 0.00 sec
45 Start 15: test_disassoc_gen_tags
4615/24 Test #15: test_disassoc_gen_tags ........... Passed 0.00 sec
47 Start 16: test_probe_req_gen_full
4816/24 Test #16: test_probe_req_gen_full .......... Passed 0.00 sec
49 Start 17: test_probe_req_gen_tags
5017/24 Test #17: test_probe_req_gen_tags .......... Passed 0.00 sec
51 Start 18: test_probe_resp_gen_full
5218/24 Test #18: test_probe_resp_gen_full ......... Passed 0.00 sec
53 Start 19: test_probe_resp_gen_tags
5419/24 Test #19: test_probe_resp_gen_tags ......... Passed 0.00 sec
55 Start 20: test_reassoc_req_gen_full
5620/24 Test #20: test_reassoc_req_gen_full ........ Passed 0.00 sec
57 Start 21: test_reassoc_req_gen_tags
5821/24 Test #21: test_reassoc_req_gen_tags ........ Passed 0.00 sec
59 Start 22: test_reassoc_resp_gen_full
6022/24 Test #22: test_reassoc_resp_gen_full ....... Passed 0.00 sec
61 Start 23: test_reassoc_resp_gen_tags
6223/24 Test #23: test_reassoc_resp_gen_tags ....... Passed 0.00 sec
63 Start 24: test_timing_ad_gen_tags
6424/24 Test #24: test_timing_ad_gen_tags .......... Passed 0.00 sec
65
66100% tests passed, 0 tests failed out of 24
67
68Total Test time (real) = 0.06 sec
69```
diff --git a/test/src/action_tests.c b/test/src/action_tests.c new file mode 100644 index 0000000..997095d --- /dev/null +++ b/test/src/action_tests.c
@@ -0,0 +1,87 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_action_gen_full() {
13 struct libwifi_action action = {0};
14
15 int ret = libwifi_create_action(&action, bcast, to, ACTION_HT);
16 if (ret != 0) {
17 fprintf(stderr, "Failed to create action: %s\n", strerror(ret));
18 return ret;
19 }
20
21 int action_len = libwifi_get_action_length(&action);
22 if (action_len <= 0) {
23 fprintf(stderr, "Invalid action length: %d\n", action_len);
24 return action_len;
25 }
26
27 unsigned char *buf = malloc(action_len);
28 if (buf == NULL) {
29 fprintf(stderr, "Failed to allocate buffer\n");
30 return -1;
31 }
32
33 int dump_len = libwifi_dump_action(&action, buf, action_len);
34 if (dump_len <= 0) {
35 fprintf(stderr, "Failed to dump action\n");
36 return ret;
37 }
38
39 return 0;
40}
41
42int test_action_add_detail() {
43 struct libwifi_action action = {0};
44
45 int ret = libwifi_create_action(&action, bcast, to, ACTION_HT);
46 if (ret != 0) {
47 fprintf(stderr, "Failed to create action: %s\n", strerror(ret));
48 return ret;
49 }
50
51 ret = libwifi_add_action_detail(&action.fixed_parameters.details, (const unsigned char *) "HELLO WORLD", strlen("HELLO WORLD"));
52
53 int action_len = libwifi_get_action_length(&action);
54 if (action_len <= 0) {
55 fprintf(stderr, "Invalid action length: %d\n", action_len);
56 return action_len;
57 }
58
59 unsigned char *buf = malloc(action_len);
60 if (buf == NULL) {
61 fprintf(stderr, "Failed to allocate buffer\n");
62 return -1;
63 }
64
65 int dump_len = libwifi_dump_action(&action, buf, action_len);
66 if (dump_len <= 0) {
67 fprintf(stderr, "Failed to dump action\n");
68 return ret;
69 }
70
71 return 0;
72}
73
74int main(int argc, char **argv) {
75 if (argc < 2) {
76 printf("Specify test\n");
77 return -1;
78 }
79
80 if (strcmp(argv[1], "--action-gen-full") == 0) {
81 return test_action_gen_full();
82 } else if (strcmp(argv[1], "--action-gen-details") == 0) {
83 return test_action_add_detail();
84 }
85
86 return -1;
87}
diff --git a/test/src/assoc_req_tests.c b/test/src/assoc_req_tests.c new file mode 100644 index 0000000..fc6379f --- /dev/null +++ b/test/src/assoc_req_tests.c
@@ -0,0 +1,91 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_assoc_req_gen_full() {
13 struct libwifi_assoc_req assoc_req = {0};
14
15 int ret = libwifi_create_assoc_req(&assoc_req, bcast, to, "Some SSID", 11);
16 if (ret != 0) {
17 fprintf(stderr, "Failed to create assoc_req: %s\n", strerror(ret));
18 return ret;
19 }
20
21 int assoc_req_len = libwifi_get_assoc_req_length(&assoc_req);
22 if (assoc_req_len <= 0) {
23 fprintf(stderr, "Invalid assoc_req length: %d\n", assoc_req_len);
24 return assoc_req_len;
25 }
26
27 unsigned char *buf = malloc(assoc_req_len);
28 if (buf == NULL) {
29 fprintf(stderr, "Failed to allocate buffer\n");
30 return -1;
31 }
32
33 int dump_len = libwifi_dump_assoc_req(&assoc_req, buf, assoc_req_len);
34 if (dump_len <= 0) {
35 fprintf(stderr, "Failed to dump assoc_req\n");
36 return ret;
37 }
38
39 return 0;
40}
41
42int test_assoc_req_add_tag() {
43 struct libwifi_assoc_req assoc_req = {0};
44
45 int ret = libwifi_create_assoc_req(&assoc_req, bcast, to, "Some SSID", 11);
46 if (ret != 0) {
47 fprintf(stderr, "Failed to create assoc_req: %s\n", strerror(ret));
48 return ret;
49 }
50
51 ret = libwifi_quick_add_tag(&assoc_req.tags, TAG_VENDOR_SPECIFIC, (const unsigned char *) "\x00\x11\x22\xAAHello World", 15);
52 if (ret != 0) {
53 fprintf(stderr, "Failed to add assoc_req tagged parameter: %s\n", strerror(ret));
54 return ret;
55 }
56
57 int assoc_req_len = libwifi_get_assoc_req_length(&assoc_req);
58 if (assoc_req_len <= 0) {
59 fprintf(stderr, "Invalid assoc_req length: %d\n", assoc_req_len);
60 return assoc_req_len;
61 }
62
63 unsigned char *buf = malloc(assoc_req_len);
64 if (buf == NULL) {
65 fprintf(stderr, "Failed to allocate buffer\n");
66 return -1;
67 }
68
69 int dump_len = libwifi_dump_assoc_req(&assoc_req, buf, assoc_req_len);
70 if (dump_len <= 0) {
71 fprintf(stderr, "Failed to dump assoc_req\n");
72 return ret;
73 }
74
75 return 0;
76}
77
78int main(int argc, char **argv) {
79 if (argc < 2) {
80 printf("Specify test\n");
81 return -1;
82 }
83
84 if (strcmp(argv[1], "--assoc_req-gen-full") == 0) {
85 return test_assoc_req_gen_full();
86 } else if (strcmp(argv[1], "--assoc_req-gen-tags") == 0) {
87 return test_assoc_req_add_tag();
88 }
89
90 return -1;
91}
diff --git a/test/src/assoc_resp_tests.c b/test/src/assoc_resp_tests.c new file mode 100644 index 0000000..3a261ed --- /dev/null +++ b/test/src/assoc_resp_tests.c
@@ -0,0 +1,91 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_assoc_resp_gen_full() {
13 struct libwifi_assoc_resp assoc_resp = {0};
14
15 int ret = libwifi_create_assoc_resp(&assoc_resp, bcast, to, 11);
16 if (ret != 0) {
17 fprintf(stderr, "Failed to create assoc_resp: %s\n", strerror(ret));
18 return ret;
19 }
20
21 int assoc_resp_len = libwifi_get_assoc_resp_length(&assoc_resp);
22 if (assoc_resp_len <= 0) {
23 fprintf(stderr, "Invalid assoc_resp length: %d\n", assoc_resp_len);
24 return assoc_resp_len;
25 }
26
27 unsigned char *buf = malloc(assoc_resp_len);
28 if (buf == NULL) {
29 fprintf(stderr, "Failed to allocate buffer\n");
30 return -1;
31 }
32
33 int dump_len = libwifi_dump_assoc_resp(&assoc_resp, buf, assoc_resp_len);
34 if (dump_len <= 0) {
35 fprintf(stderr, "Failed to dump assoc_resp\n");
36 return ret;
37 }
38
39 return 0;
40}
41
42int test_assoc_resp_add_tag() {
43 struct libwifi_assoc_resp assoc_resp = {0};
44
45 int ret = libwifi_create_assoc_resp(&assoc_resp, bcast, to, 11);
46 if (ret != 0) {
47 fprintf(stderr, "Failed to create assoc_resp: %s\n", strerror(ret));
48 return ret;
49 }
50
51 ret = libwifi_quick_add_tag(&assoc_resp.tags, TAG_VENDOR_SPECIFIC, (const unsigned char *) "\x00\x11\x22\xAAHello World", 15);
52 if (ret != 0) {
53 fprintf(stderr, "Failed to add assoc_resp tagged parameter: %s\n", strerror(ret));
54 return ret;
55 }
56
57 int assoc_resp_len = libwifi_get_assoc_resp_length(&assoc_resp);
58 if (assoc_resp_len <= 0) {
59 fprintf(stderr, "Invalid assoc_resp length: %d\n", assoc_resp_len);
60 return assoc_resp_len;
61 }
62
63 unsigned char *buf = malloc(assoc_resp_len);
64 if (buf == NULL) {
65 fprintf(stderr, "Failed to allocate buffer\n");
66 return -1;
67 }
68
69 int dump_len = libwifi_dump_assoc_resp(&assoc_resp, buf, assoc_resp_len);
70 if (dump_len <= 0) {
71 fprintf(stderr, "Failed to dump assoc_resp\n");
72 return ret;
73 }
74
75 return 0;
76}
77
78int main(int argc, char **argv) {
79 if (argc < 2) {
80 printf("Specify test\n");
81 return -1;
82 }
83
84 if (strcmp(argv[1], "--assoc_resp-gen-full") == 0) {
85 return test_assoc_resp_gen_full();
86 } else if (strcmp(argv[1], "--assoc_resp-gen-tags") == 0) {
87 return test_assoc_resp_add_tag();
88 }
89
90 return -1;
91}
diff --git a/test/src/atim_tests.c b/test/src/atim_tests.c new file mode 100644 index 0000000..43f2265 --- /dev/null +++ b/test/src/atim_tests.c
@@ -0,0 +1,35 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_atim_gen_full() {
13 struct libwifi_atim atim = {0};
14
15 int ret = libwifi_create_atim(&atim, bcast, to, to);
16 if (ret != 0) {
17 fprintf(stderr, "Failed to create atim: %s\n", strerror(ret));
18 return ret;
19 }
20
21 return 0;
22}
23
24int main(int argc, char **argv) {
25 if (argc < 2) {
26 printf("Specify test\n");
27 return -1;
28 }
29
30 if (strcmp(argv[1], "--atim-gen-full") == 0) {
31 return test_atim_gen_full();
32 }
33
34 return -1;
35}
diff --git a/test/src/auth_tests.c b/test/src/auth_tests.c new file mode 100644 index 0000000..f78aeed --- /dev/null +++ b/test/src/auth_tests.c
@@ -0,0 +1,91 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_auth_gen_full() {
13 struct libwifi_auth auth = {0};
14
15 int ret = libwifi_create_auth(&auth, bcast, to, 0, 100, STATUS_SUCCESS);
16 if (ret != 0) {
17 fprintf(stderr, "Failed to create auth: %s\n", strerror(ret));
18 return ret;
19 }
20
21 int auth_len = libwifi_get_auth_length(&auth);
22 if (auth_len <= 0) {
23 fprintf(stderr, "Invalid auth length: %d\n", auth_len);
24 return auth_len;
25 }
26
27 unsigned char *buf = malloc(auth_len);
28 if (buf == NULL) {
29 fprintf(stderr, "Failed to allocate buffer\n");
30 return -1;
31 }
32
33 int dump_len = libwifi_dump_auth(&auth, buf, auth_len);
34 if (dump_len <= 0) {
35 fprintf(stderr, "Failed to dump auth\n");
36 return ret;
37 }
38
39 return 0;
40}
41
42int test_auth_add_tag() {
43 struct libwifi_auth auth = {0};
44
45 int ret = libwifi_create_auth(&auth, bcast, to, 0, 100, STATUS_SUCCESS);
46 if (ret != 0) {
47 fprintf(stderr, "Failed to create auth: %s\n", strerror(ret));
48 return ret;
49 }
50
51 ret = libwifi_quick_add_tag(&auth.tags, TAG_VENDOR_SPECIFIC, (const unsigned char *) "\x00\x11\x22\xAAHello World", 15);
52 if (ret != 0) {
53 fprintf(stderr, "Failed to add auth tagged parameter: %s\n", strerror(ret));
54 return ret;
55 }
56
57 int auth_len = libwifi_get_auth_length(&auth);
58 if (auth_len <= 0) {
59 fprintf(stderr, "Invalid auth length: %d\n", auth_len);
60 return auth_len;
61 }
62
63 unsigned char *buf = malloc(auth_len);
64 if (buf == NULL) {
65 fprintf(stderr, "Failed to allocate buffer\n");
66 return -1;
67 }
68
69 int dump_len = libwifi_dump_auth(&auth, buf, auth_len);
70 if (dump_len <= 0) {
71 fprintf(stderr, "Failed to dump auth\n");
72 return ret;
73 }
74
75 return 0;
76}
77
78int main(int argc, char **argv) {
79 if (argc < 2) {
80 printf("Specify test\n");
81 return -1;
82 }
83
84 if (strcmp(argv[1], "--auth-gen-full") == 0) {
85 return test_auth_gen_full();
86 } else if (strcmp(argv[1], "--auth-gen-tags") == 0) {
87 return test_auth_add_tag();
88 }
89
90 return -1;
91}
diff --git a/test/src/beacon_tests.c b/test/src/beacon_tests.c new file mode 100644 index 0000000..1c4e17e --- /dev/null +++ b/test/src/beacon_tests.c
@@ -0,0 +1,91 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_beacon_gen_full() {
13 struct libwifi_beacon beacon = {0};
14
15 int ret = libwifi_create_beacon(&beacon, bcast, to, "Some SSID", 11);
16 if (ret != 0) {
17 fprintf(stderr, "Failed to create beacon: %s\n", strerror(ret));
18 return ret;
19 }
20
21 int beacon_len = libwifi_get_beacon_length(&beacon);
22 if (beacon_len <= 0) {
23 fprintf(stderr, "Invalid beacon length: %d\n", beacon_len);
24 return beacon_len;
25 }
26
27 unsigned char *buf = malloc(beacon_len);
28 if (buf == NULL) {
29 fprintf(stderr, "Failed to allocate buffer\n");
30 return -1;
31 }
32
33 int dump_len = libwifi_dump_beacon(&beacon, buf, beacon_len);
34 if (dump_len <= 0) {
35 fprintf(stderr, "Failed to dump beacon\n");
36 return ret;
37 }
38
39 return 0;
40}
41
42int test_beacon_add_tag() {
43 struct libwifi_beacon beacon = {0};
44
45 int ret = libwifi_create_beacon(&beacon, bcast, to, "Some SSID", 11);
46 if (ret != 0) {
47 fprintf(stderr, "Failed to create beacon: %s\n", strerror(ret));
48 return ret;
49 }
50
51 ret = libwifi_quick_add_tag(&beacon.tags, TAG_VENDOR_SPECIFIC, (const unsigned char *) "\x00\x11\x22\xAAHello World", 15);
52 if (ret != 0) {
53 fprintf(stderr, "Failed to add beacon tagged parameter: %s\n", strerror(ret));
54 return ret;
55 }
56
57 int beacon_len = libwifi_get_beacon_length(&beacon);
58 if (beacon_len <= 0) {
59 fprintf(stderr, "Invalid beacon length: %d\n", beacon_len);
60 return beacon_len;
61 }
62
63 unsigned char *buf = malloc(beacon_len);
64 if (buf == NULL) {
65 fprintf(stderr, "Failed to allocate buffer\n");
66 return -1;
67 }
68
69 int dump_len = libwifi_dump_beacon(&beacon, buf, beacon_len);
70 if (dump_len <= 0) {
71 fprintf(stderr, "Failed to dump beacon\n");
72 return ret;
73 }
74
75 return 0;
76}
77
78int main(int argc, char **argv) {
79 if (argc < 2) {
80 printf("Specify test\n");
81 return -1;
82 }
83
84 if (strcmp(argv[1], "--beacon-gen-full") == 0) {
85 return test_beacon_gen_full();
86 } else if (strcmp(argv[1], "--beacon-gen-tags") == 0) {
87 return test_beacon_add_tag();
88 }
89
90 return -1;
91}
diff --git a/test/src/deauth_tests.c b/test/src/deauth_tests.c new file mode 100644 index 0000000..9033574 --- /dev/null +++ b/test/src/deauth_tests.c
@@ -0,0 +1,91 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_deauth_gen_full() {
13 struct libwifi_deauth deauth = {0};
14
15 int ret = libwifi_create_deauth(&deauth, bcast, to, REASON_STA_LEAVING);
16 if (ret != 0) {
17 fprintf(stderr, "Failed to create deauth: %s\n", strerror(ret));
18 return ret;
19 }
20
21 int deauth_len = libwifi_get_deauth_length(&deauth);
22 if (deauth_len <= 0) {
23 fprintf(stderr, "Invalid deauth length: %d\n", deauth_len);
24 return deauth_len;
25 }
26
27 unsigned char *buf = malloc(deauth_len);
28 if (buf == NULL) {
29 fprintf(stderr, "Failed to allocate buffer\n");
30 return -1;
31 }
32
33 int dump_len = libwifi_dump_deauth(&deauth, buf, deauth_len);
34 if (dump_len <= 0) {
35 fprintf(stderr, "Failed to dump deauth\n");
36 return ret;
37 }
38
39 return 0;
40}
41
42int test_deauth_add_tag() {
43 struct libwifi_deauth deauth = {0};
44
45 int ret = libwifi_create_deauth(&deauth, bcast, to, REASON_STA_LEAVING);
46 if (ret != 0) {
47 fprintf(stderr, "Failed to create deauth: %s\n", strerror(ret));
48 return ret;
49 }
50
51 ret = libwifi_quick_add_tag(&deauth.tags, TAG_VENDOR_SPECIFIC, (const unsigned char *) "\x00\x11\x22\xAAHello World", 15);
52 if (ret != 0) {
53 fprintf(stderr, "Failed to add deauth tagged parameter: %s\n", strerror(ret));
54 return ret;
55 }
56
57 int deauth_len = libwifi_get_deauth_length(&deauth);
58 if (deauth_len <= 0) {
59 fprintf(stderr, "Invalid deauth length: %d\n", deauth_len);
60 return deauth_len;
61 }
62
63 unsigned char *buf = malloc(deauth_len);
64 if (buf == NULL) {
65 fprintf(stderr, "Failed to allocate buffer\n");
66 return -1;
67 }
68
69 int dump_len = libwifi_dump_deauth(&deauth, buf, deauth_len);
70 if (dump_len <= 0) {
71 fprintf(stderr, "Failed to dump deauth\n");
72 return ret;
73 }
74
75 return 0;
76}
77
78int main(int argc, char **argv) {
79 if (argc < 2) {
80 printf("Specify test\n");
81 return -1;
82 }
83
84 if (strcmp(argv[1], "--deauth-gen-full") == 0) {
85 return test_deauth_gen_full();
86 } else if (strcmp(argv[1], "--deauth-gen-tags") == 0) {
87 return test_deauth_add_tag();
88 }
89
90 return -1;
91}
diff --git a/test/src/disassoc_tests.c b/test/src/disassoc_tests.c new file mode 100644 index 0000000..c5e27de --- /dev/null +++ b/test/src/disassoc_tests.c
@@ -0,0 +1,91 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_disassoc_gen_full() {
13 struct libwifi_disassoc disassoc = {0};
14
15 int ret = libwifi_create_disassoc(&disassoc, bcast, to, REASON_STA_LEAVING);
16 if (ret != 0) {
17 fprintf(stderr, "Failed to create disassoc: %s\n", strerror(ret));
18 return ret;
19 }
20
21 int disassoc_len = libwifi_get_disassoc_length(&disassoc);
22 if (disassoc_len <= 0) {
23 fprintf(stderr, "Invalid disassoc length: %d\n", disassoc_len);
24 return disassoc_len;
25 }
26
27 unsigned char *buf = malloc(disassoc_len);
28 if (buf == NULL) {
29 fprintf(stderr, "Failed to allocate buffer\n");
30 return -1;
31 }
32
33 int dump_len = libwifi_dump_disassoc(&disassoc, buf, disassoc_len);
34 if (dump_len <= 0) {
35 fprintf(stderr, "Failed to dump disassoc\n");
36 return ret;
37 }
38
39 return 0;
40}
41
42int test_disassoc_add_tag() {
43 struct libwifi_disassoc disassoc = {0};
44
45 int ret = libwifi_create_disassoc(&disassoc, bcast, to, REASON_STA_LEAVING);
46 if (ret != 0) {
47 fprintf(stderr, "Failed to create disassoc: %s\n", strerror(ret));
48 return ret;
49 }
50
51 ret = libwifi_quick_add_tag(&disassoc.tags, TAG_VENDOR_SPECIFIC, (const unsigned char *) "\x00\x11\x22\xAAHello World", 15);
52 if (ret != 0) {
53 fprintf(stderr, "Failed to add disassoc tagged parameter: %s\n", strerror(ret));
54 return ret;
55 }
56
57 int disassoc_len = libwifi_get_disassoc_length(&disassoc);
58 if (disassoc_len <= 0) {
59 fprintf(stderr, "Invalid disassoc length: %d\n", disassoc_len);
60 return disassoc_len;
61 }
62
63 unsigned char *buf = malloc(disassoc_len);
64 if (buf == NULL) {
65 fprintf(stderr, "Failed to allocate buffer\n");
66 return -1;
67 }
68
69 int dump_len = libwifi_dump_disassoc(&disassoc, buf, disassoc_len);
70 if (dump_len <= 0) {
71 fprintf(stderr, "Failed to dump disassoc\n");
72 return ret;
73 }
74
75 return 0;
76}
77
78int main(int argc, char **argv) {
79 if (argc < 2) {
80 printf("Specify test\n");
81 return -1;
82 }
83
84 if (strcmp(argv[1], "--disassoc-gen-full") == 0) {
85 return test_disassoc_gen_full();
86 } else if (strcmp(argv[1], "--disassoc-gen-tags") == 0) {
87 return test_disassoc_add_tag();
88 }
89
90 return -1;
91}
diff --git a/test/src/probe_req_tests.c b/test/src/probe_req_tests.c new file mode 100644 index 0000000..553c9d9 --- /dev/null +++ b/test/src/probe_req_tests.c
@@ -0,0 +1,91 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_probe_req_gen_full() {
13 struct libwifi_probe_req probe_req = {0};
14
15 int ret = libwifi_create_probe_req(&probe_req, bcast, to, to, "Some SSID", 11);
16 if (ret != 0) {
17 fprintf(stderr, "Failed to create probe_req: %s\n", strerror(ret));
18 return ret;
19 }
20
21 int probe_req_len = libwifi_get_probe_req_length(&probe_req);
22 if (probe_req_len <= 0) {
23 fprintf(stderr, "Invalid probe_req length: %d\n", probe_req_len);
24 return probe_req_len;
25 }
26
27 unsigned char *buf = malloc(probe_req_len);
28 if (buf == NULL) {
29 fprintf(stderr, "Failed to allocate buffer\n");
30 return -1;
31 }
32
33 int dump_len = libwifi_dump_probe_req(&probe_req, buf, probe_req_len);
34 if (dump_len <= 0) {
35 fprintf(stderr, "Failed to dump probe_req\n");
36 return ret;
37 }
38
39 return 0;
40}
41
42int test_probe_req_add_tag() {
43 struct libwifi_probe_req probe_req = {0};
44
45 int ret = libwifi_create_probe_req(&probe_req, bcast, to, to, "Some SSID", 11);
46 if (ret != 0) {
47 fprintf(stderr, "Failed to create probe_req: %s\n", strerror(ret));
48 return ret;
49 }
50
51 ret = libwifi_quick_add_tag(&probe_req.tags, TAG_VENDOR_SPECIFIC, (const unsigned char *) "\x00\x11\x22\xAAHello World", 15);
52 if (ret != 0) {
53 fprintf(stderr, "Failed to add probe_req tagged parameter: %s\n", strerror(ret));
54 return ret;
55 }
56
57 int probe_req_len = libwifi_get_probe_req_length(&probe_req);
58 if (probe_req_len <= 0) {
59 fprintf(stderr, "Invalid probe_req length: %d\n", probe_req_len);
60 return probe_req_len;
61 }
62
63 unsigned char *buf = malloc(probe_req_len);
64 if (buf == NULL) {
65 fprintf(stderr, "Failed to allocate buffer\n");
66 return -1;
67 }
68
69 int dump_len = libwifi_dump_probe_req(&probe_req, buf, probe_req_len);
70 if (dump_len <= 0) {
71 fprintf(stderr, "Failed to dump probe_req\n");
72 return ret;
73 }
74
75 return 0;
76}
77
78int main(int argc, char **argv) {
79 if (argc < 2) {
80 printf("Specify test\n");
81 return -1;
82 }
83
84 if (strcmp(argv[1], "--probe_req-gen-full") == 0) {
85 return test_probe_req_gen_full();
86 } else if (strcmp(argv[1], "--probe_req-gen-tags") == 0) {
87 return test_probe_req_add_tag();
88 }
89
90 return -1;
91}
diff --git a/test/src/probe_resp_tests.c b/test/src/probe_resp_tests.c new file mode 100644 index 0000000..463a90a --- /dev/null +++ b/test/src/probe_resp_tests.c
@@ -0,0 +1,91 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_probe_resp_gen_full() {
13 struct libwifi_probe_resp probe_resp = {0};
14
15 int ret = libwifi_create_probe_resp(&probe_resp, bcast, to, "Some SSID", 11);
16 if (ret != 0) {
17 fprintf(stderr, "Failed to create probe_resp: %s\n", strerror(ret));
18 return ret;
19 }
20
21 int probe_resp_len = libwifi_get_probe_resp_length(&probe_resp);
22 if (probe_resp_len <= 0) {
23 fprintf(stderr, "Invalid probe_resp length: %d\n", probe_resp_len);
24 return probe_resp_len;
25 }
26
27 unsigned char *buf = malloc(probe_resp_len);
28 if (buf == NULL) {
29 fprintf(stderr, "Failed to allocate buffer\n");
30 return -1;
31 }
32
33 int dump_len = libwifi_dump_probe_resp(&probe_resp, buf, probe_resp_len);
34 if (dump_len <= 0) {
35 fprintf(stderr, "Failed to dump probe_resp\n");
36 return ret;
37 }
38
39 return 0;
40}
41
42int test_probe_resp_add_tag() {
43 struct libwifi_probe_resp probe_resp = {0};
44
45 int ret = libwifi_create_probe_resp(&probe_resp, bcast, to, "Some SSID", 11);
46 if (ret != 0) {
47 fprintf(stderr, "Failed to create probe_resp: %s\n", strerror(ret));
48 return ret;
49 }
50
51 ret = libwifi_quick_add_tag(&probe_resp.tags, TAG_VENDOR_SPECIFIC, (const unsigned char *) "\x00\x11\x22\xAAHello World", 15);
52 if (ret != 0) {
53 fprintf(stderr, "Failed to add probe_resp tagged parameter: %s\n", strerror(ret));
54 return ret;
55 }
56
57 int probe_resp_len = libwifi_get_probe_resp_length(&probe_resp);
58 if (probe_resp_len <= 0) {
59 fprintf(stderr, "Invalid probe_resp length: %d\n", probe_resp_len);
60 return probe_resp_len;
61 }
62
63 unsigned char *buf = malloc(probe_resp_len);
64 if (buf == NULL) {
65 fprintf(stderr, "Failed to allocate buffer\n");
66 return -1;
67 }
68
69 int dump_len = libwifi_dump_probe_resp(&probe_resp, buf, probe_resp_len);
70 if (dump_len <= 0) {
71 fprintf(stderr, "Failed to dump probe_resp\n");
72 return ret;
73 }
74
75 return 0;
76}
77
78int main(int argc, char **argv) {
79 if (argc < 2) {
80 printf("Specify test\n");
81 return -1;
82 }
83
84 if (strcmp(argv[1], "--probe_resp-gen-full") == 0) {
85 return test_probe_resp_gen_full();
86 } else if (strcmp(argv[1], "--probe_resp-gen-tags") == 0) {
87 return test_probe_resp_add_tag();
88 }
89
90 return -1;
91}
diff --git a/test/src/reassoc_req_tests.c b/test/src/reassoc_req_tests.c new file mode 100644 index 0000000..00e2b53 --- /dev/null +++ b/test/src/reassoc_req_tests.c
@@ -0,0 +1,91 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_reassoc_req_gen_full() {
13 struct libwifi_reassoc_req reassoc_req = {0};
14
15 int ret = libwifi_create_reassoc_req(&reassoc_req, bcast, to, to, "Some SSID", 11);
16 if (ret != 0) {
17 fprintf(stderr, "Failed to create reassoc_req: %s\n", strerror(ret));
18 return ret;
19 }
20
21 int reassoc_req_len = libwifi_get_reassoc_req_length(&reassoc_req);
22 if (reassoc_req_len <= 0) {
23 fprintf(stderr, "Invalid reassoc_req length: %d\n", reassoc_req_len);
24 return reassoc_req_len;
25 }
26
27 unsigned char *buf = malloc(reassoc_req_len);
28 if (buf == NULL) {
29 fprintf(stderr, "Failed to allocate buffer\n");
30 return -1;
31 }
32
33 int dump_len = libwifi_dump_reassoc_req(&reassoc_req, buf, reassoc_req_len);
34 if (dump_len <= 0) {
35 fprintf(stderr, "Failed to dump reassoc_req\n");
36 return ret;
37 }
38
39 return 0;
40}
41
42int test_reassoc_req_add_tag() {
43 struct libwifi_reassoc_req reassoc_req = {0};
44
45 int ret = libwifi_create_reassoc_req(&reassoc_req, bcast, to, to, "Some SSID", 11);
46 if (ret != 0) {
47 fprintf(stderr, "Failed to create reassoc_req: %s\n", strerror(ret));
48 return ret;
49 }
50
51 ret = libwifi_quick_add_tag(&reassoc_req.tags, TAG_VENDOR_SPECIFIC, (const unsigned char *) "\x00\x11\x22\xAAHello World", 15);
52 if (ret != 0) {
53 fprintf(stderr, "Failed to add reassoc_req tagged parameter: %s\n", strerror(ret));
54 return ret;
55 }
56
57 int reassoc_req_len = libwifi_get_reassoc_req_length(&reassoc_req);
58 if (reassoc_req_len <= 0) {
59 fprintf(stderr, "Invalid reassoc_req length: %d\n", reassoc_req_len);
60 return reassoc_req_len;
61 }
62
63 unsigned char *buf = malloc(reassoc_req_len);
64 if (buf == NULL) {
65 fprintf(stderr, "Failed to allocate buffer\n");
66 return -1;
67 }
68
69 int dump_len = libwifi_dump_reassoc_req(&reassoc_req, buf, reassoc_req_len);
70 if (dump_len <= 0) {
71 fprintf(stderr, "Failed to dump reassoc_req\n");
72 return ret;
73 }
74
75 return 0;
76}
77
78int main(int argc, char **argv) {
79 if (argc < 2) {
80 printf("Specify test\n");
81 return -1;
82 }
83
84 if (strcmp(argv[1], "--reassoc_req-gen-full") == 0) {
85 return test_reassoc_req_gen_full();
86 } else if (strcmp(argv[1], "--reassoc_req-gen-tags") == 0) {
87 return test_reassoc_req_add_tag();
88 }
89
90 return -1;
91}
diff --git a/test/src/reassoc_resp_tests.c b/test/src/reassoc_resp_tests.c new file mode 100644 index 0000000..8167916 --- /dev/null +++ b/test/src/reassoc_resp_tests.c
@@ -0,0 +1,91 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_reassoc_resp_gen_full() {
13 struct libwifi_reassoc_resp reassoc_resp = {0};
14
15 int ret = libwifi_create_reassoc_resp(&reassoc_resp, bcast, to, 11);
16 if (ret != 0) {
17 fprintf(stderr, "Failed to create reassoc_resp: %s\n", strerror(ret));
18 return ret;
19 }
20
21 int reassoc_resp_len = libwifi_get_reassoc_resp_length(&reassoc_resp);
22 if (reassoc_resp_len <= 0) {
23 fprintf(stderr, "Invalid reassoc_resp length: %d\n", reassoc_resp_len);
24 return reassoc_resp_len;
25 }
26
27 unsigned char *buf = malloc(reassoc_resp_len);
28 if (buf == NULL) {
29 fprintf(stderr, "Failed to allocate buffer\n");
30 return -1;
31 }
32
33 int dump_len = libwifi_dump_reassoc_resp(&reassoc_resp, buf, reassoc_resp_len);
34 if (dump_len <= 0) {
35 fprintf(stderr, "Failed to dump reassoc_resp\n");
36 return ret;
37 }
38
39 return 0;
40}
41
42int test_reassoc_resp_add_tag() {
43 struct libwifi_reassoc_resp reassoc_resp = {0};
44
45 int ret = libwifi_create_reassoc_resp(&reassoc_resp, bcast, to, 11);
46 if (ret != 0) {
47 fprintf(stderr, "Failed to create reassoc_resp: %s\n", strerror(ret));
48 return ret;
49 }
50
51 ret = libwifi_quick_add_tag(&reassoc_resp.tags, TAG_VENDOR_SPECIFIC, (const unsigned char *) "\x00\x11\x22\xAAHello World", 15);
52 if (ret != 0) {
53 fprintf(stderr, "Failed to add reassoc_resp tagged parameter: %s\n", strerror(ret));
54 return ret;
55 }
56
57 int reassoc_resp_len = libwifi_get_reassoc_resp_length(&reassoc_resp);
58 if (reassoc_resp_len <= 0) {
59 fprintf(stderr, "Invalid reassoc_resp length: %d\n", reassoc_resp_len);
60 return reassoc_resp_len;
61 }
62
63 unsigned char *buf = malloc(reassoc_resp_len);
64 if (buf == NULL) {
65 fprintf(stderr, "Failed to allocate buffer\n");
66 return -1;
67 }
68
69 int dump_len = libwifi_dump_reassoc_resp(&reassoc_resp, buf, reassoc_resp_len);
70 if (dump_len <= 0) {
71 fprintf(stderr, "Failed to dump reassoc_resp\n");
72 return ret;
73 }
74
75 return 0;
76}
77
78int main(int argc, char **argv) {
79 if (argc < 2) {
80 printf("Specify test\n");
81 return -1;
82 }
83
84 if (strcmp(argv[1], "--reassoc_resp-gen-full") == 0) {
85 return test_reassoc_resp_gen_full();
86 } else if (strcmp(argv[1], "--reassoc_resp-gen-tags") == 0) {
87 return test_reassoc_resp_add_tag();
88 }
89
90 return -1;
91}
diff --git a/test/src/timing_ad_tests.c b/test/src/timing_ad_tests.c new file mode 100644 index 0000000..59d20eb --- /dev/null +++ b/test/src/timing_ad_tests.c
@@ -0,0 +1,57 @@
1#include "../../src/libwifi.h"
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6
7#define BCAST_MAC "\xff\xff\xff\xff\xff\xff"
8#define TO_MAC "\x00\x20\x91\xAA\xBB\xCC"
9const unsigned char to[] = TO_MAC;
10const unsigned char bcast[] = BCAST_MAC;
11
12int test_timing_ad_gen_full() {
13 struct libwifi_timing_advert time_ad = {0};
14 struct libwifi_timing_advert_fields ad_fields = {0};
15
16 ad_fields.timing_capabilities = 2;
17 memcpy(ad_fields.time_error, "\xCC\xCC\xCC\xCC\xCC", 5);
18 memcpy(ad_fields.time_update, "\xBB", 1);
19 memcpy(ad_fields.time_value,
20 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA", 10);
21
22 int ret = libwifi_create_timing_advert(&time_ad, to, to, &ad_fields, "GB", -56, -56, -30, -20);
23 if (ret != 0) {
24 fprintf(stderr, "Failed to create timing advert\n");
25 return ret;
26 }
27
28 unsigned char *buf = NULL;
29 size_t buf_len = libwifi_get_timing_advert_length(&time_ad);
30 buf = malloc(buf_len);
31 if (buf == NULL) {
32 fprintf(stderr, "Failed to create buffer\n");
33 return -1;
34 }
35 printf("buf_len: %zu\n", buf_len);
36
37 ret = libwifi_dump_timing_advert(&time_ad, buf, buf_len);
38 if (ret < 0) {
39 fprintf(stderr, "Failed to dump advert");
40 return ret;
41 }
42
43 return 0;
44}
45
46int main(int argc, char **argv) {
47 if (argc < 2) {
48 printf("Specify test\n");
49 return -1;
50 }
51
52 if (strcmp(argv[1], "--timing_ad-gen-full") == 0) {
53 return test_timing_ad_gen_full();
54 }
55
56 return -1;
57}
diff --git a/test/src/.clang-format b/utils/.clang-format index 111249f..111249f 100644 --- a/test/src/.clang-format +++ b/utils/.clang-format
diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt new file mode 100644 index 0000000..bdf7227 --- /dev/null +++ b/utils/CMakeLists.txt
@@ -0,0 +1,15 @@
1cmake_minimum_required(VERSION 3.18)
2
3project(libwifi_tests VERSION 0.1)
4
5set(CMAKE_CXX_STANDARD 11)
6set(CMAKE_CXX_STANDARD_REQUIRED True)
7
8set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ggdb -O0")
9
10add_executable(test_misc src/helpers.c src/test_misc.c)
11add_executable(test_generation src/helpers.c src/test_generation.c)
12add_executable(test_parsing src/helpers.c src/test_parsing.c)
13target_link_libraries(test_misc wifi)
14target_link_libraries(test_generation wifi pcap)
15target_link_libraries(test_parsing wifi pcap)
diff --git a/test/src/helpers.c b/utils/src/helpers.c index 9fc9d0b..9fc9d0b 100644 --- a/test/src/helpers.c +++ b/utils/src/helpers.c
diff --git a/test/src/helpers.h b/utils/src/helpers.h index 99a5329..99a5329 100644 --- a/test/src/helpers.h +++ b/utils/src/helpers.h
diff --git a/test/src/test_generation.c b/utils/src/test_generation.c index 407e87f..407e87f 100644 --- a/test/src/test_generation.c +++ b/utils/src/test_generation.c
diff --git a/test/src/test_misc.c b/utils/src/test_misc.c index f103455..f103455 100644 --- a/test/src/test_misc.c +++ b/utils/src/test_misc.c
diff --git a/test/src/test_parsing.c b/utils/src/test_parsing.c index c345346..c345346 100644 --- a/test/src/test_parsing.c +++ b/utils/src/test_parsing.c