@@ -2,15 +2,19 @@ SHELL = /bin/bash
22SERVICE_NAME = cloud-server-test
33VERSION_TAG = vnext-$(shell git rev-parse --short=7 --verify HEAD)
44SIMULATOR_NAME_SUFFIX ?= $(shell hostname)
5+ USER_ID := $(shell id -u)
6+ GROUP_ID := $(shell id -g)
57TMP_PATH = $(shell pwd) /.tmp
68CERT_PATH = $(TMP_PATH ) /pki_certs
9+ CLOUD_SID ?= adebc667-1f2b-41e3-bf5c-6d6eabc68cc6
710DEVSIM_NET_HOST_PATH = $(shell pwd) /.tmp/devsim-net-host
811CERT_TOOL_IMAGE ?= ghcr.io/plgd-dev/hub/cert-tool:vnext
912# supported values: ECDSA-SHA256, ECDSA-SHA384, ECDSA-SHA512
1013CERT_TOOL_SIGN_ALG ?= ECDSA-SHA256
1114# supported values: P256, P384, P521
1215CERT_TOOL_ELLIPTIC_CURVE ?= P256
1316DEVSIM_IMAGE ?= ghcr.io/iotivity/iotivity-lite/cloud-server-discovery-resource-observable-debug:vnext
17+ HUB_TEST_DEVICE_IMAGE = ghcr.io/plgd-dev/hub/test-cloud-server:vnext-pr1202
1418
1519default : build
1620
@@ -28,21 +32,58 @@ build-testcontainer:
2832
2933build : build-testcontainer
3034
35+ ROOT_CA_CRT = $(CERT_PATH ) /cloudca.pem
36+ ROOT_CA_KEY = $(CERT_PATH ) /cloudcakey.pem
37+ INTERMEDIATE_CA_CRT = $(CERT_PATH ) /intermediatecacrt.pem
38+ INTERMEDIATE_CA_KEY = $(CERT_PATH ) /intermediatecakey.pem
39+ MFG_CRT = $(CERT_PATH ) /mfgcrt.pem
40+ MFG_KEY = $(CERT_PATH ) /mfgkey.pem
41+ COAP_CRT = $(CERT_PATH ) /coapcrt.pem
42+ COAP_KEY = $(CERT_PATH ) /coapkey.pem
43+
3144certificates :
3245 mkdir -p $(CERT_PATH )
3346 chmod 0777 $(CERT_PATH )
3447 docker pull $(CERT_TOOL_IMAGE )
35- docker run --rm -v $(CERT_PATH ) :/out $(CERT_TOOL_IMAGE ) --outCert=/out/cloudca.pem --outKey=/out/cloudcakey.pem \
36- --cert.subject.cn=" ca" --cert.signatureAlgorithm=$(CERT_TOOL_SIGN_ALG ) --cert.ellipticCurve=$(CERT_TOOL_ELLIPTIC_CURVE ) \
37- --cmd.generateRootCA
38- docker run --rm -v $(CERT_PATH ) :/out $(CERT_TOOL_IMAGE ) --signerCert=/out/cloudca.pem --signerKey=/out/cloudcakey.pem \
39- --outCert=/out/intermediatecacrt.pem --outKey=/out/intermediatecakey.pem --cert.basicConstraints.maxPathLen=0 \
40- --cert.subject.cn=" intermediateCA" --cert.signatureAlgorithm=$(CERT_TOOL_SIGN_ALG ) \
41- --cert.ellipticCurve=$(CERT_TOOL_ELLIPTIC_CURVE ) --cmd.generateIntermediateCA
42- docker run --rm -v $(CERT_PATH ) :/out $(CERT_TOOL_IMAGE ) --signerCert=/out/intermediatecacrt.pem \
43- --signerKey=/out/intermediatecakey.pem --outCert=/out/mfgcrt.pem --outKey=/out/mfgkey.pem --cert.san.domain=localhost \
44- --cert.san.ip=127.0.0.1 --cert.subject.cn=" mfg" --cert.signatureAlgorithm=$(CERT_TOOL_SIGN_ALG ) \
45- --cert.ellipticCurve=$(CERT_TOOL_ELLIPTIC_CURVE ) --cmd.generateCertificate
48+
49+ docker run \
50+ --rm -v $(CERT_PATH):/out \
51+ --user $(USER_ID):$(GROUP_ID) \
52+ $(CERT_TOOL_IMAGE) \
53+ --outCert=/out/cloudca.pem --outKey=/out/cloudcakey.pem \
54+ --cert.subject.cn="ca" --cert.signatureAlgorithm=$(CERT_TOOL_SIGN_ALG) --cert.ellipticCurve=$(CERT_TOOL_ELLIPTIC_CURVE) \
55+ --cmd.generateRootCA
56+
57+ docker run \
58+ --rm -v $(CERT_PATH):/out \
59+ --user $(USER_ID):$(GROUP_ID) \
60+ $(CERT_TOOL_IMAGE) \
61+ --signerCert=/out/cloudca.pem --signerKey=/out/cloudcakey.pem \
62+ --outCert=/out/intermediatecacrt.pem --outKey=/out/intermediatecakey.pem \
63+ --cert.basicConstraints.maxPathLen=0 --cert.subject.cn="intermediateCA" \
64+ --cert.ellipticCurve=$(CERT_TOOL_ELLIPTIC_CURVE) --cert.signatureAlgorithm=$(CERT_TOOL_SIGN_ALG) \
65+ --cmd.generateIntermediateCA
66+
67+ docker run \
68+ --rm -v $(CERT_PATH):/out \
69+ --user $(USER_ID):$(GROUP_ID) \
70+ $(CERT_TOOL_IMAGE) \
71+ --signerCert=/out/intermediatecacrt.pem --signerKey=/out/intermediatecakey.pem \
72+ --outCert=/out/mfgcrt.pem --outKey=/out/mfgkey.pem --cert.san.domain=localhost \
73+ --cert.san.ip=127.0.0.1 --cert.subject.cn="mfg" \
74+ --cert.signatureAlgorithm=$(CERT_TOOL_SIGN_ALG) --cert.ellipticCurve=$(CERT_TOOL_ELLIPTIC_CURVE) \
75+ --cmd.generateCertificate
76+
77+ docker run \
78+ --rm -v $(CERT_PATH):/out \
79+ --user $(USER_ID):$(GROUP_ID) \
80+ ${CERT_TOOL_IMAGE} \
81+ --signerCert=/out/cloudca.pem --signerKey=/out/cloudcakey.pem \
82+ --outCert=/out/coapcrt.pem --outKey=/out/coapkey.pem \
83+ --cert.san.ip=127.0.0.1 --cert.san.domain=localhost \
84+ --cert.signatureAlgorithm=$(CERT_TOOL_SIGN_ALG) --cert.ellipticCurve=$(CERT_TOOL_ELLIPTIC_CURVE) \
85+ --cmd.generateCertificate --cert.subject.cn=uuid:$(CLOUD_SID)
86+
4687 sudo chown -R $(shell whoami) $(CERT_PATH)
4788 chmod -R 0777 $(CERT_PATH)
4889
@@ -64,8 +105,15 @@ env: clean certificates
64105
65106unit-test : certificates
66107 mkdir -p $(TMP_PATH )
67- go test -race -v ./schema/... -covermode=atomic -coverprofile=$(TMP_PATH ) /schema.coverage.txt
68- ROOT_CA_CRT=" $( CERT_PATH) /cloudca.pem" ROOT_CA_KEY=" $( CERT_PATH) /cloudcakey.pem" go test -race -v ./pkg/... -covermode=atomic -coverprofile=$(TMP_PATH ) /pkg.coverage.txt
108+ ROOT_CA_CRT=" $( ROOT_CA_CRT) " ROOT_CA_KEY=" $( ROOT_CA_KEY) " \
109+ MFG_CRT=" $( MFG_CRT) " MFG_KEY=" $( MFG_KEY) " \
110+ INTERMEDIATE_CA_CRT=" $( INTERMEDIATE_CA_CRT) " INTERMEDIATE_CA_KEY=$(INTERMEDIATE_CA_KEY ) \
111+ COAP_CRT=" $( COAP_CRT) " COAP_KEY=" $( COAP_KEY) " \
112+ CLOUD_SID=$(CLOUD_SID ) \
113+ go test -race -parallel 1 -v ./bridge/... -coverpkg=./... -covermode=atomic -coverprofile=$(TMP_PATH ) /bridge.unit.coverage.txt
114+ go test -race -v ./schema/... -covermode=atomic -coverprofile=$(TMP_PATH ) /schema.unit.coverage.txt
115+ ROOT_CA_CRT=" $( ROOT_CA_CRT) " ROOT_CA_KEY=" $( ROOT_CA_KEY) " \
116+ go test -race -v ./pkg/... -covermode=atomic -coverprofile=$(TMP_PATH ) /pkg.unit.coverage.txt
69117
70118test : env build-testcontainer
71119 docker run \
@@ -75,8 +123,63 @@ test: env build-testcontainer
75123 -v $(TMP_PATH ) :/tmp \
76124 $(SERVICE_NAME ) :$(VERSION_TAG ) -test.parallel 1 -test.v -test.coverprofile=/tmp/coverage.txt
77125
126+ test-bridge :
127+ sudo rm -rf $(TMP_PATH ) /data || :
128+ mkdir -p $(TMP_PATH ) /data
129+ # pull image
130+ docker pull $(HUB_TEST_DEVICE_IMAGE )
131+ # prepare environment
132+ docker run \
133+ --rm \
134+ --network=host \
135+ --name hub-device-tests-environment \
136+ --env PREPARE_ENV=true \
137+ --env RUN=false \
138+ --env COAP_GATEWAY_CLOUD_ID=" $( CLOUD_SID) " \
139+ -v $(TMP_PATH ) :/tmp \
140+ -v $(TMP_PATH ) /data:/data \
141+ $(HUB_TEST_DEVICE_IMAGE )
142+
143+ # start device
144+ rm -rf $(TMP_PATH)/bridge || :
145+ mkdir -p $(TMP_PATH)/bridge
146+ go build -C ./test/bridge-device -cover -o ./bridge-device
147+ pkill -KILL bridge-device || :
148+ CLOUD_SID=$(CLOUD_SID) CA_POOL=$(TMP_PATH)/data/certs/root_ca.crt \
149+ CERT_FILE=$(TMP_PATH)/data/certs/external/coap-gateway.crt \
150+ KEY_FILE=$(TMP_PATH)/data/certs/external/coap-gateway.key \
151+ GOCOVERDIR=$(TMP_PATH)/bridge \
152+ ./test/bridge-device/bridge-device &
153+
154+ # run tests
155+ docker run \
156+ --rm \
157+ --network=host \
158+ --name hub-device-tests \
159+ --env PREPARE_ENV=false \
160+ --env RUN=true \
161+ --env COAP_GATEWAY_CLOUD_ID="$(CLOUD_SID)" \
162+ --env TEST_DEVICE_NAME="bridged-device-0" \
163+ --env TEST_DEVICE_TYPE="bridged" \
164+ --env GRPC_GATEWAY_TEST_DISABLED=1 \
165+ --env IOTIVITY_LITE_TEST_RUN="(TestOffboard|TestOffboardWithoutSignIn|TestOffboardWithRepeat|TestRepublishAfterRefresh)$$" \
166+ -v $(TMP_PATH):/tmp \
167+ -v $(TMP_PATH)/data:/data \
168+ $(HUB_TEST_DEVICE_IMAGE)
169+
170+ # stop device
171+ pkill -TERM bridge-device || :
172+ while pgrep -x bridge-device > /dev/null; do \
173+ echo "waiting for bridge-device to exit"; \
174+ sleep 1; \
175+ done
176+ go tool covdata textfmt -i=$(TMP_PATH)/bridge -o $(TMP_PATH)/bridge.coverage.txt
177+
78178clean :
79- docker rm -f devsim-net-host || true
179+ docker rm -f devsim-net-host || :
180+ docker rm -f hub-device-tests-environment || :
181+ docker rm -f hub-device-tests || :
182+ pkill -KILL bridge-device || :
80183 sudo rm -rf .tmp/*
81184
82185.PHONY : build-testcontainer build certificates clean env test unit-test
0 commit comments