@@ -38,6 +38,157 @@ jobs:
38
38
with :
39
39
name : container-build
40
40
path : /tmp/container.tar
41
+
42
+ function-test-preparation :
43
+ name : Container functionality test preparation
44
+ runs-on : ubuntu-latest
45
+ permissions : write-all
46
+ steps :
47
+ - name : Checkout GIT repository
48
+ uses : actions/checkout@v4
49
+ - name : Log in to Github container registry
50
+ run : echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
51
+ - name : Build container for functionality test
52
+ uses : docker/build-push-action@v5
53
+ with :
54
+ push : true
55
+ load : false
56
+ context : .
57
+ file : ./Dockerfile
58
+ tags : ghcr.io/cybcon/modbus-client/modbus-client:test
59
+
60
+ function-test-execution :
61
+ name : Container functionality test execution
62
+ needs : function-test-preparation
63
+ runs-on : ubuntu-latest
64
+ services :
65
+ modbusserver :
66
+ image : oitc/modbus-server:latest
67
+ ports :
68
+ - 5020:5020
69
+ steps :
70
+ - name : Log in to Github container registry
71
+ run : echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
72
+ - name : Pull Modbus Client for functionality test
73
+ run : |
74
+ docker pull ghcr.io/cybcon/modbus-client/modbus-client:test
75
+ echo "# Modbus functionality test" >> ${GITHUB_STEP_SUMMARY}
76
+ - name : Get modbus server address
77
+ id : modbus-server-address
78
+ run : |
79
+ LOCAL_MACHINE=$(ifconfig -a eth0|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")
80
+ echo "DEBUG: ${LOCAL_MACHINE}"
81
+ echo "ip=${LOCAL_MACHINE}" >> $GITHUB_OUTPUT
82
+ - name : Validate server endpoint
83
+ run : |
84
+ modbusserver=${{steps. modbus-server-address.outputs.ip}}
85
+ ping -c 1 -q ${modbusserver}
86
+ RC=$?
87
+ if [ ${RC} -gt 0 ]; then
88
+ echo "ERROR: Modbus slave not reachable" >&2
89
+ exit 1
90
+ fi
91
+ - name : Test Discrete Output Coils
92
+ run : |
93
+ modbusserver=${{steps. modbus-server-address.outputs.ip}}
94
+ echo "## Get Discrete Output Coils" >> ${GITHUB_STEP_SUMMARY}
95
+ echo '<details>' >> ${GITHUB_STEP_SUMMARY}
96
+ echo ' <summary>Test output details</summary>' >> ${GITHUB_STEP_SUMMARY}
97
+ echo "" >> ${GITHUB_STEP_SUMMARY}
98
+ echo ' ```' >> ${GITHUB_STEP_SUMMARY}
99
+ echo " docker run --rm ghcr.io/cybcon/modbus-client/modbus-client:test -s ${modbusserver} -p 5020 -t 1 -r 0 -l 10" >> ${GITHUB_STEP_SUMMARY}
100
+ docker run --rm ghcr.io/cybcon/modbus-client/modbus-client:test -s ${modbusserver} -p 5020 -t 1 -r 0 -l 10 > output.tmp 2>&1
101
+ cat output.tmp | while read line
102
+ do
103
+ echo " ${line}" >> ${GITHUB_STEP_SUMMARY}
104
+ done
105
+ echo ' ```' >> ${GITHUB_STEP_SUMMARY}
106
+ echo '</details>' >> ${GITHUB_STEP_SUMMARY}
107
+ echo "" >> ${GITHUB_STEP_SUMMARY}
108
+ # analyze output
109
+ RESULT=$(cat output.tmp | grep ^2 | awk '{print $3}')
110
+ if [ "${RESULT}" == "False" ]; then
111
+ echo "Test succesfull :white_check_mark:" >> ${GITHUB_STEP_SUMMARY}
112
+ else
113
+ echo "Test failed :x:" >> ${GITHUB_STEP_SUMMARY}
114
+ exit 1
115
+ fi
116
+ - name : Test Discrete Input Contacts
117
+ run : |
118
+ modbusserver=${{steps. modbus-server-address.outputs.ip}}
119
+ echo "## Get Discrete Input Contacts" >> ${GITHUB_STEP_SUMMARY}
120
+ echo '<details>' >> ${GITHUB_STEP_SUMMARY}
121
+ echo ' <summary>Test output details</summary>' >> ${GITHUB_STEP_SUMMARY}
122
+ echo "" >> ${GITHUB_STEP_SUMMARY}
123
+ echo ' ```' >> ${GITHUB_STEP_SUMMARY}
124
+ echo " docker run --rm ghcr.io/cybcon/modbus-client/modbus-client:test -s ${modbusserver} -p 5020 -t 2 -r 0 -l 10" >> ${GITHUB_STEP_SUMMARY}
125
+ docker run --rm ghcr.io/cybcon/modbus-client/modbus-client:test -s ${modbusserver} -p 5020 -t 2 -r 0 -l 10 > output.tmp 2>&1
126
+ cat output.tmp | while read line
127
+ do
128
+ echo " ${line}" >> ${GITHUB_STEP_SUMMARY}
129
+ done
130
+ echo ' ```' >> ${GITHUB_STEP_SUMMARY}
131
+ echo '</details>' >> ${GITHUB_STEP_SUMMARY}
132
+ echo "" >> ${GITHUB_STEP_SUMMARY}
133
+ # analyze output
134
+ RESULT=$(cat output.tmp | grep ^10002 | awk '{print $3}')
135
+ if [ "${RESULT}" == "False" ]; then
136
+ echo "Test succesfull :white_check_mark:" >> ${GITHUB_STEP_SUMMARY}
137
+ else
138
+ echo "Test failed :x:" >> ${GITHUB_STEP_SUMMARY}
139
+ exit 1
140
+ fi
141
+ - name : Test Analog Output Holding Register
142
+ run : |
143
+ modbusserver=${{steps. modbus-server-address.outputs.ip}}
144
+ echo "## Get Analog Output Holding Register" >> ${GITHUB_STEP_SUMMARY}
145
+ echo '<details>' >> ${GITHUB_STEP_SUMMARY}
146
+ echo ' <summary>Test output details</summary>' >> ${GITHUB_STEP_SUMMARY}
147
+ echo "" >> ${GITHUB_STEP_SUMMARY}
148
+ echo ' ```' >> ${GITHUB_STEP_SUMMARY}
149
+ echo " docker run --rm ghcr.io/cybcon/modbus-client/modbus-client:test -s ${modbusserver} -p 5020 -t 3 -r 0 -l 10" >> ${GITHUB_STEP_SUMMARY}
150
+ docker run --rm ghcr.io/cybcon/modbus-client/modbus-client:test -s ${modbusserver} -p 5020 -t 3 -r 0 -l 10 > output.tmp 2>&1
151
+ cat output.tmp | while read line
152
+ do
153
+ echo " ${line}" >> ${GITHUB_STEP_SUMMARY}
154
+ done
155
+ echo ' ```' >> ${GITHUB_STEP_SUMMARY}
156
+ echo '</details>' >> ${GITHUB_STEP_SUMMARY}
157
+ echo "" >> ${GITHUB_STEP_SUMMARY}
158
+ # analyze output
159
+ RESULT=$(cat output.tmp | grep ^40002 | awk '{print $2}')
160
+ if [ "${RESULT}" == "0x0000" ]; then
161
+ echo "Test succesfull :white_check_mark:" >> ${GITHUB_STEP_SUMMARY}
162
+ else
163
+ echo "Test failed :x:" >> ${GITHUB_STEP_SUMMARY}
164
+ exit 1
165
+ fi
166
+ - name : Test Analog Input Register
167
+ run : |
168
+ modbusserver=${{steps. modbus-server-address.outputs.ip}}
169
+ echo "## Get Analog Input Register" >> ${GITHUB_STEP_SUMMARY}
170
+ echo '<details>' >> ${GITHUB_STEP_SUMMARY}
171
+ echo ' <summary>Test output details</summary>' >> ${GITHUB_STEP_SUMMARY}
172
+ echo "" >> ${GITHUB_STEP_SUMMARY}
173
+ echo ' ```' >> ${GITHUB_STEP_SUMMARY}
174
+ echo " docker run --rm ghcr.io/cybcon/modbus-client/modbus-client:test -s ${modbusserver} -p 5020 -t 4 -r 0 -l 10" >> ${GITHUB_STEP_SUMMARY}
175
+ docker run --rm ghcr.io/cybcon/modbus-client/modbus-client:test -s ${modbusserver} -p 5020 -t 4 -r 0 -l 10 > output.tmp 2>&1
176
+ cat output.tmp | while read line
177
+ do
178
+ echo " ${line}" >> ${GITHUB_STEP_SUMMARY}
179
+ done
180
+ echo ' ```' >> ${GITHUB_STEP_SUMMARY}
181
+ echo '</details>' >> ${GITHUB_STEP_SUMMARY}
182
+ echo "" >> ${GITHUB_STEP_SUMMARY}
183
+ # analyze output
184
+ RESULT=$(cat output.tmp | grep ^30002 | head -1 | awk '{print $2}')
185
+ if [ "${RESULT}" == "0x0000" ]; then
186
+ echo "Test succesfull :white_check_mark:" >> ${GITHUB_STEP_SUMMARY}
187
+ else
188
+ echo "Test failed :x:" >> ${GITHUB_STEP_SUMMARY}
189
+ exit 1
190
+ fi
191
+
41
192
scan :
42
193
name : Container vulnerability scan
43
194
needs : container-build
0 commit comments