1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdarg.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "../src/portsentry.h"
#include "../src/config_data.h"
#include "../src/state_machine.h"
#include "../src/config_data.h"
struct sockaddr_in CreateIpv4Addr(const char *ip_str);
struct sockaddr_in6 CreateIpv6Addr(const char *ip_str);
void TestUninitializedState(void);
void TestTriggerCountZero(void);
void TestIpv4TriggerLogic(void);
void TestIpv4Eviction(void);
void TestIpv6TriggerLogic(void);
void TestIpv6Eviction(void);
void TestUnsupportedFamily(void);
struct sockaddr_in CreateIpv4Addr(const char *ip_str) {
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
if (inet_pton(AF_INET, ip_str, &addr.sin_addr) != 1) {
perror("inet_pton IPv4 failed");
exit(EXIT_FAILURE);
}
return addr;
}
struct sockaddr_in6 CreateIpv6Addr(const char *ip_str) {
struct sockaddr_in6 addr;
memset(&addr, 0, sizeof(addr));
addr.sin6_family = AF_INET6;
if (inet_pton(AF_INET6, ip_str, &addr.sin6_addr) != 1) {
perror("inet_pton IPv6 failed");
exit(EXIT_FAILURE);
}
return addr;
}
void TestUninitializedState(void) {
struct SentryState state;
state.isInitialized = FALSE;
struct sockaddr_in addr_ipv4 = CreateIpv4Addr("192.168.1.1");
configData.configTriggerCount = 1;
int result = CheckState(&state, (struct sockaddr *)&addr_ipv4);
assert(result == ERROR);
}
void TestTriggerCountZero(void) {
struct SentryState state;
InitSentryState(&state);
struct sockaddr_in addr_ipv4 = CreateIpv4Addr("192.168.1.1");
configData.configTriggerCount = 0;
int result = CheckState(&state, (struct sockaddr *)&addr_ipv4);
assert(result == TRUE);
FreeSentryState(&state);
}
void TestIpv4TriggerLogic(void) {
struct SentryState state;
InitSentryState(&state);
struct sockaddr_in addr1 = CreateIpv4Addr("192.168.0.1");
struct sockaddr_in addr2 = CreateIpv4Addr("192.168.0.2");
configData.configTriggerCount = 3;
int result;
result = CheckState(&state, (struct sockaddr *)&addr1);
assert(result == FALSE);
result = CheckState(&state, (struct sockaddr *)&addr1);
assert(result == FALSE);
result = CheckState(&state, (struct sockaddr *)&addr2);
assert(result == FALSE);
result = CheckState(&state, (struct sockaddr *)&addr1);
assert(result == TRUE);
result = CheckState(&state, (struct sockaddr *)&addr1);
assert(result == TRUE);
result = CheckState(&state, (struct sockaddr *)&addr2);
assert(result == FALSE);
result = CheckState(&state, (struct sockaddr *)&addr2);
assert(result == TRUE);
FreeSentryState(&state);
}
void TestIpv6TriggerLogic(void) {
struct SentryState state;
InitSentryState(&state);
struct sockaddr_in6 addr1 = CreateIpv6Addr("2001:db8::1");
struct sockaddr_in6 addr2 = CreateIpv6Addr("2001:db8::2");
configData.configTriggerCount = 2;
int result;
result = CheckState(&state, (struct sockaddr *)&addr1);
assert(result == FALSE);
result = CheckState(&state, (struct sockaddr *)&addr2);
assert(result == FALSE);
result = CheckState(&state, (struct sockaddr *)&addr1);
assert(result == TRUE);
result = CheckState(&state, (struct sockaddr *)&addr1);
assert(result == TRUE);
result = CheckState(&state, (struct sockaddr *)&addr2);
assert(result == TRUE);
FreeSentryState(&state);
}
void TestUnsupportedFamily(void) {
struct SentryState state;
InitSentryState(&state);
struct sockaddr unsupported_addr;
unsupported_addr.sa_family = AF_UNIX;
configData.configTriggerCount = 1;
int result = CheckState(&state, &unsupported_addr);
assert(result == ERROR);
FreeSentryState(&state);
}
int main(void) {
TestUninitializedState();
TestTriggerCountZero();
TestIpv4TriggerLogic();
TestIpv6TriggerLogic();
TestUnsupportedFamily();
return 0;
}
|