Skip to content

Commit efa642d

Browse files
ci: fix fsim ov verification and resale tests
1 parent 219f635 commit efa642d

4 files changed

Lines changed: 132 additions & 8 deletions

File tree

test/ci/test-onboarding-config.sh

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,15 @@ run_go_fdo_server() {
7070
shift 3
7171
mkdir -p "$(dirname "${log}")"
7272
mkdir -p "$(dirname "${pid_file}")"
73-
nohup "${bin_dir}/go-fdo-server" "${role}" "${@}" &>"${log}" &
73+
# On RHEL 10.2 the binary is installed by RPM into /usr/bin; for all other
74+
# distros it is built locally and placed in ${bin_dir}.
75+
local server_bin
76+
if [[ -x "${bin_dir}/go-fdo-server" ]]; then
77+
server_bin="${bin_dir}/go-fdo-server"
78+
else
79+
server_bin="$(command -v go-fdo-server)"
80+
fi
81+
nohup "${server_bin}" "${role}" "${@}" &>"${log}" &
7482
echo -n $! >"${pid_file}"
7583
}
7684

test/ci/test-resale.sh

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,51 @@ new_owner_https_subj="/C=US/O=FDO/CN=new_owner"
3333
new_owner_https_key="${certs_dir}/new_owner-http.key"
3434
new_owner_https_crt="${certs_dir}/new_owner-http.crt"
3535

36-
start_service_new_owner() {
37-
local extra_opts=()
36+
new_owner_config_file="${base_dir}/new_owner.yaml"
37+
38+
generate_new_owner_config() {
39+
cat >"${new_owner_config_file}" <<EOF
40+
log:
41+
level: "debug"
42+
db:
43+
type: "sqlite"
44+
dsn: "file:${base_dir}/new_owner.db"
45+
http:
46+
ip: "${new_owner_dns}"
47+
port: "${new_owner_port}"
48+
device_ca:
49+
cert: "${device_ca_crt}"
50+
owner:
51+
key: "${new_owner_key}"
52+
to0_insecure_tls: true
53+
EOF
3854
if [ "${new_owner_protocol}" = "https" ]; then
39-
extra_opts+=(--http-cert "${new_owner_https_crt}" --http-key "${new_owner_https_key}" --to0-insecure-tls)
55+
# Append TLS cert/key under the http: section requires a fresh write;
56+
# rewrite the whole file so the indentation is correct.
57+
cat >"${new_owner_config_file}" <<EOF
58+
log:
59+
level: "debug"
60+
db:
61+
type: "sqlite"
62+
dsn: "file:${base_dir}/new_owner.db"
63+
http:
64+
ip: "${new_owner_dns}"
65+
port: "${new_owner_port}"
66+
cert: "${new_owner_https_crt}"
67+
key: "${new_owner_https_key}"
68+
device_ca:
69+
cert: "${device_ca_crt}"
70+
owner:
71+
key: "${new_owner_key}"
72+
to0_insecure_tls: true
73+
EOF
4074
fi
75+
}
76+
77+
start_service_new_owner() {
78+
generate_new_owner_config
4179
run_go_fdo_server owner ${new_owner_service} new_owner ${new_owner_pid_file} ${new_owner_log} \
42-
--owner-key="${new_owner_key}" \
43-
--device-ca-cert="${device_ca_crt}"
44-
"${extra_opts[@]}"
80+
--config="${new_owner_config_file}"
4581
}
4682

4783
run_test() {

test/ci/utils.sh

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,15 @@ run_go_fdo_server() {
319319
shift 5
320320
mkdir -p "$(dirname "${log}")"
321321
mkdir -p "$(dirname "${pid_file}")"
322-
nohup "${bin_dir}/go-fdo-server" "${role}" "${address_port}" --db-type sqlite --db-dsn "file:${base_dir}/${name}.db" --log-level=debug "${@}" &>"${log}" &
322+
# On RHEL 10.2 the binary is installed by RPM into /usr/bin; for all other
323+
# distros it is built locally and placed in ${bin_dir}.
324+
local server_bin
325+
if [[ -x "${bin_dir}/go-fdo-server" ]]; then
326+
server_bin="${bin_dir}/go-fdo-server"
327+
else
328+
server_bin="$(command -v go-fdo-server)"
329+
fi
330+
nohup "${server_bin}" "${role}" "${address_port}" --db-type sqlite --db-dsn "file:${base_dir}/${name}.db" --log-level=debug "${@}" &>"${log}" &
323331
echo -n $! >"${pid_file}"
324332
}
325333

test/rpm/test-resale.sh

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,78 @@ set -euo pipefail
55
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)/../ci/test-resale.sh"
66
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)/utils.sh"
77

8+
# Override run_test to inject configure_services before start_services.
9+
# test/ci/test-resale.sh's run_test calls start_services directly (which works
10+
# in the CI context where services are started as plain processes with all
11+
# config passed as CLI flags). In the RPM context, manufacturer/rendezvous/owner
12+
# are systemd services that read config files written by configure_service_*,
13+
# so configure_services must be called first.
14+
# new_owner is still started as a plain nohup process (no RPM systemd unit),
15+
# so it works without configure_service_new_owner.
16+
run_test() {
17+
# Add the new owner service defined above
18+
services+=("${new_owner_service_name}")
19+
20+
log_info "Setting the error trap handler"
21+
trap on_failure ERR
22+
23+
log_info "Environment variables"
24+
show_env
25+
26+
log_info "Creating directories"
27+
create_directories
28+
29+
log_info "Generating service certificates"
30+
generate_service_certs
31+
32+
log_info "Build and install the 'go-fdo-client' binary"
33+
install_client
34+
35+
log_info "Build and install 'go-fdo-server' binary"
36+
install_server
37+
38+
log_info "Configuring services"
39+
configure_services
40+
41+
log_info "Configure DNS and start services"
42+
start_services
43+
44+
log_info "Wait for the services to be ready:"
45+
wait_for_services_ready
46+
47+
log_info "Setting or updating Rendezvous Info (RendezvousInfo)"
48+
set_or_update_rendezvous_info "${manufacturer_url}" "${rv_info}"
49+
50+
log_info "Adding Device CA certificate to rendezvous"
51+
add_device_ca_cert "${rendezvous_url}" "${device_ca_crt}" | jq -r -M .
52+
53+
log_info "Run Device Initialization"
54+
guid=$(run_device_initialization)
55+
log_info "Device initialized with GUID: ${guid}"
56+
57+
log_info "Sending Ownership Voucher to the Owner"
58+
send_manufacturer_ov_to_owner "${manufacturer_url}" "${guid}" "${owner_url}"
59+
60+
log_info "Extracting the public key from the New Owner cert"
61+
extract_pubkey_from_cert ${new_owner_crt} ${new_owner_pub}
62+
63+
log_info "Trigger the Resell protocol on the current owner"
64+
resell "${owner_url}" "${guid}" "${new_owner_pub}" "${new_owner_ov}"
65+
66+
log_info "Setting or updating the New Owner Redirect Info (RVTO2Addr)"
67+
set_or_update_owner_redirect_info "${new_owner_url}" "${new_owner_service_name}" "${new_owner_dns}" "${new_owner_port}" "${new_owner_protocol}"
68+
69+
log_info "Sending the Ownership Voucher to the New Owner"
70+
send_ov_to_owner "${new_owner_url}" "${new_owner_ov}"
71+
72+
log_info "Running FIDO Device Onboard"
73+
run_fido_device_onboard "${guid}" --debug
74+
75+
log_info "Unsetting the error trap handler"
76+
trap - ERR
77+
test_pass
78+
}
79+
880
# Allow running directly
981
[[ "${BASH_SOURCE[0]}" != "$0" ]] || {
1082
run_test

0 commit comments

Comments
 (0)