Skip to content

Commit 5891612

Browse files
authored
Feature/container function test (#21)
* Add functionalit test * Upgrade dependencies and increase version number * fixing duplicated job name * fixing docker pull command for modbus-client pull * use the modbus-client from function-test-preparation
1 parent b193bca commit 5891612

File tree

4 files changed

+158
-6
lines changed

4 files changed

+158
-6
lines changed

.github/workflows/container-image-build-validation.yaml

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,157 @@ jobs:
3838
with:
3939
name: container-build
4040
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+
41192
scan:
42193
name: Container vulnerability scan
43194
needs: container-build

Dockerfile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
FROM alpine:3.18.4 AS base
1+
FROM alpine:3.18.8 AS base
22
RUN apk upgrade --available --no-cache --update \
33
&& apk add --no-cache --update \
4-
python3=3.11.6-r0 \
4+
python3=3.11.8-r1 \
55
py3-pip=23.1.2-r0 \
66
# Cleanup APK
77
&& rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
@@ -12,7 +12,7 @@ RUN apk upgrade --available --no-cache --update \
1212
FROM base as builder
1313
RUN apk add --no-cache --update \
1414
g++=12.2.1_git20220924-r10 \
15-
python3-dev=3.11.6-r0 \
15+
python3-dev=3.11.8-r1 \
1616
&& ln -s /usr/include/locale.h /usr/include/xlocale.h
1717
COPY --chown=root:root FloatToHex /FloatToHex
1818

@@ -26,7 +26,7 @@ RUN python3 setup.py install
2626
# Building the docker image with already compiled modules
2727
FROM base
2828
LABEL maintainer="Michael Oberdorf IT-Consulting <info@oberdorf-itc.de>"
29-
LABEL site.local.program.version="1.0.14"
29+
LABEL site.local.program.version="1.0.15"
3030

3131
COPY --from=builder /usr/lib/python3.11/site-packages /usr/lib/python3.11/site-packages
3232

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ Container Registry: [DockerHub](https://hub.docker.com/r/oitc/modbus-client)
88

99
# Supported tags and respective `Dockerfile` links
1010

11-
* [`latest`, `1.0.14`](https://github.com/cybcon/modbus-client/blob/v1.0.14/Dockerfile)
11+
* [`latest`, `1.0.15`](https://github.com/cybcon/modbus-client/blob/v1.0.15/Dockerfile)
12+
* [`1.0.14`](https://github.com/cybcon/modbus-client/blob/v1.0.14/Dockerfile)
1213
* [`1.0.13`](https://github.com/cybcon/modbus-client/blob/v1.0.13/Dockerfile)
1314
* [`1.0.12`](https://github.com/cybcon/modbus-client/blob/v1.0.12/Dockerfile)
1415
* [`1.0.11`](https://github.com/cybcon/modbus-client/blob/v1.0.11/Dockerfile)

src/app/modbus_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import FloatToHex
1919
from numpy import little_endian
2020

21-
VERSION='1.0.14'
21+
VERSION='1.0.15'
2222
DEBUG=False
2323
"""
2424
###############################################################################

0 commit comments

Comments
 (0)