Skip to content

Commit 7ede24f

Browse files
authored
Merge pull request #243 from aidangarske/stunnel-WPFF-testing-support
wolfProvider support for `WOLFPROV_FORCE_FAIL=1` with Stunnel testing suite
2 parents 17dad91 + 0300981 commit 7ede24f

2 files changed

Lines changed: 181 additions & 0 deletions

File tree

wolfProvider/stunnel/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
This patch adds support for testing stunnel with `WOLFPROV_FORCE_FAIL=1`
2+
environment variable, which is used to simulate provider failures during
3+
testing. It is only needed if you are testing wolfProvider with
4+
`WOLFPROV_FORCE_FAIL=1`.
5+
The patch includes modifications to certificate generation and session
6+
resumption tests to properly handle this test mode.
Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
diff --git a/tests/certs/maketestcert.sh b/tests/certs/maketestcert.sh
2+
index 3c4f8b5..23af9af 100755
3+
--- a/tests/certs/maketestcert.sh
4+
+++ b/tests/certs/maketestcert.sh
5+
@@ -9,6 +9,13 @@ cd "${result_path}"
6+
7+
mkdir "tmp/"
8+
9+
+# Unset WOLFPROV_FORCE_FAIL to generate certs
10+
+if [ "${WOLFPROV_FORCE_FAIL}" = "1" ]; then
11+
+ echo "WOLFPROV_FORCE_FAIL is set to 1 - Unsetting to generate certs"
12+
+ export WOLFPROV_FORCE_FAIL=
13+
+ FORCE_FAIL_UNSET=1
14+
+fi
15+
+
16+
# create new psk secrets
17+
gen_psk () {
18+
tr -c -d 'A-Za-z0-9' </dev/urandom 2>> "maketestcert.log" | head -c 50 > tmp/psk.txt
19+
@@ -113,3 +120,9 @@ rm -rf "tmp/"
20+
21+
# restore settings
22+
LD_LIBRARY_PATH=$TEMP_LD_LIBRARY_PATH
23+
+
24+
+# Set WOLFPROV_FORCE_FAIL back to 1 to continue with tests
25+
+if [ "${FORCE_FAIL_UNSET}" = "1" ]; then
26+
+ echo "WOLFPROV_FORCE_FAIL is set to 1 - Setting back to 1 to continue with tests"
27+
+ export WOLFPROV_FORCE_FAIL=1
28+
+fi
29+
diff --git a/tests/plugins/p14_resume_ticket.py b/tests/plugins/p14_resume_ticket.py
30+
index 22db91e..b2ad7ce 100644
31+
--- a/tests/plugins/p14_resume_ticket.py
32+
+++ b/tests/plugins/p14_resume_ticket.py
33+
@@ -33,6 +33,13 @@ class ResumeTicketTLSv12(StunnelTest):
34+
def __init__(self, cfg: Config, logger: logging.Logger, path:pathlib.Path):
35+
super().__init__(cfg, logger, path)
36+
self.params.description = '141. Stateless session ticket resumption with TLSv1.2'
37+
+
38+
+ # Skip this test when force fail is enabled
39+
+ if os.environ.get('WOLFPROV_FORCE_FAIL') == '1':
40+
+ self.events.skip = ["Skipping session resumption test in force fail mode"]
41+
+ self.events.count = 0 # Set count to 0 to force skip
42+
+ return
43+
+
44+
self.events.count = 2
45+
self.events.success = [
46+
"TLS accepted: previous session reused"
47+
@@ -53,6 +60,12 @@ class ResumeTicketTLSv12(StunnelTest):
48+
]
49+
self.path = path
50+
51+
+ async def test_stunnel(self, cfg: Config) -> None:
52+
+ """Override test_stunnel to skip when force fail is enabled"""
53+
+ if os.environ.get('WOLFPROV_FORCE_FAIL') == '1':
54+
+ self.logger.info("Skipping session resumption test in force fail mode")
55+
+ return
56+
+ await super().test_stunnel(cfg)
57+
58+
async def prepare_client_cfgfile(
59+
self, cfg: Config, ports: list, service: str
60+
@@ -117,6 +130,13 @@ class ResumeTicketTLSv13(StunnelTest):
61+
def __init__(self, cfg: Config, logger: logging.Logger, path:pathlib.Path):
62+
super().__init__(cfg, logger, path)
63+
self.params.description = '142. Stateless session ticket resumption with TLSv1.3'
64+
+
65+
+ # Skip this test when force fail is enabled
66+
+ if os.environ.get('WOLFPROV_FORCE_FAIL') == '1':
67+
+ self.events.skip = ["Skipping session resumption test in force fail mode"]
68+
+ self.events.count = 0 # Set count to 0 to force skip
69+
+ return
70+
+
71+
self.events.count = 2
72+
self.events.skip = [
73+
"Incorrect version of TLS protocol",
74+
@@ -141,6 +161,12 @@ class ResumeTicketTLSv13(StunnelTest):
75+
]
76+
self.path = path
77+
78+
+ async def test_stunnel(self, cfg: Config) -> None:
79+
+ """Override test_stunnel to skip when force fail is enabled"""
80+
+ if os.environ.get('WOLFPROV_FORCE_FAIL') == '1':
81+
+ self.logger.info("Skipping session resumption test in force fail mode")
82+
+ return
83+
+ await super().test_stunnel(cfg)
84+
85+
async def prepare_client_cfgfile(
86+
self, cfg: Config, ports: list, service: str
87+
diff --git a/tests/plugins/p15_resume_secret.py b/tests/plugins/p15_resume_secret.py
88+
index 85bd69b..723f4d9 100644
89+
--- a/tests/plugins/p15_resume_secret.py
90+
+++ b/tests/plugins/p15_resume_secret.py
91+
@@ -31,6 +31,13 @@ class ResumeTicketSecret(StunnelTest):
92+
def __init__(self, cfg: Config, logger: logging.Logger, path:pathlib.Path):
93+
super().__init__(cfg, logger, path)
94+
self.params.description = '151. Session resumption with secret keys'
95+
+
96+
+ # Skip this test when force fail is enabled
97+
+ if os.environ.get('WOLFPROV_FORCE_FAIL') == '1':
98+
+ self.events.skip = ["Skipping session resumption test in force fail mode"]
99+
+ self.events.count = 0 # Set count to 0 to force skip
100+
+ return
101+
+
102+
self.events.count = 3
103+
self.events.success = [
104+
"TLS accepted: previous session reused"
105+
@@ -51,6 +58,12 @@ class ResumeTicketSecret(StunnelTest):
106+
]
107+
self.path = path
108+
109+
+ async def test_stunnel(self, cfg: Config) -> None:
110+
+ """Override test_stunnel to skip when force fail is enabled"""
111+
+ if os.environ.get('WOLFPROV_FORCE_FAIL') == '1':
112+
+ self.logger.info("Skipping session resumption test in force fail mode")
113+
+ return
114+
+ await super().test_stunnel(cfg)
115+
116+
async def prepare_client_cfgfile(
117+
self, cfg: Config, ports: list, service: str
118+
diff --git a/tests/plugins/p24_delay.py b/tests/plugins/p24_delay.py
119+
index a66e833..39d9aeb 100644
120+
--- a/tests/plugins/p24_delay.py
121+
+++ b/tests/plugins/p24_delay.py
122+
@@ -39,6 +39,13 @@ class RetryDelay(StunnelTest):
123+
self.events.skip = [
124+
"FORK"
125+
]
126+
+
127+
+ # Skip this test when force fail is enabled
128+
+ if os.environ.get('WOLFPROV_FORCE_FAIL') == '1':
129+
+ self.events.skip = ["Skipping session resumption test in force fail mode"]
130+
+ self.events.count = 0 # Set count to 0 to force skip
131+
+ return
132+
+
133+
self.events.count = 2
134+
self.events.success = [
135+
r"\[server1\].*TLS accepted: previous session reused"
136+
@@ -59,6 +66,12 @@ class RetryDelay(StunnelTest):
137+
]
138+
self.path = path
139+
140+
+ async def test_stunnel(self, cfg: Config) -> None:
141+
+ """Override test_stunnel to skip when force fail is enabled"""
142+
+ if os.environ.get('WOLFPROV_FORCE_FAIL') == '1':
143+
+ self.logger.info("Skipping session resumption test in force fail mode")
144+
+ return
145+
+ await super().test_stunnel(cfg)
146+
147+
async def prepare_client_cfgfile(
148+
self, cfg: Config, ports: list, service: str
149+
@@ -121,6 +134,13 @@ class RetryNoDelay(StunnelTest):
150+
self.events.skip = [
151+
"FORK"
152+
]
153+
+
154+
+ # Skip this test when force fail is enabled
155+
+ if os.environ.get('WOLFPROV_FORCE_FAIL') == '1':
156+
+ self.events.skip = ["Skipping session resumption test in force fail mode"]
157+
+ self.events.count = 0 # Set count to 0 to force skip
158+
+ return
159+
+
160+
self.events.count = 2
161+
self.events.success = [
162+
"TLS accepted: new session negotiated"
163+
@@ -141,6 +161,12 @@ class RetryNoDelay(StunnelTest):
164+
]
165+
self.path = path
166+
167+
+ async def test_stunnel(self, cfg: Config) -> None:
168+
+ """Override test_stunnel to skip when force fail is enabled"""
169+
+ if os.environ.get('WOLFPROV_FORCE_FAIL') == '1':
170+
+ self.logger.info("Skipping session resumption test in force fail mode")
171+
+ return
172+
+ await super().test_stunnel(cfg)
173+
174+
async def prepare_client_cfgfile(
175+
self, cfg: Config, ports: list, service: str

0 commit comments

Comments
 (0)