-
Notifications
You must be signed in to change notification settings - Fork 133
Expand file tree
/
Copy pathtest.sh
More file actions
executable file
Β·214 lines (185 loc) Β· 9.17 KB
/
Copy pathtest.sh
File metadata and controls
executable file
Β·214 lines (185 loc) Β· 9.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
#!/usr/bin/env bash
#
# test.sh - Test-specific functions for push-to-external-registry-idempotent
#
# This test validates idempotent release behavior by:
# 1. Verifying the first (auto-created) release pushed components
# 2. Creating a second release with the SAME snapshot
# 3. Verifying the second release filtered all components (idempotency)
#
# This file is sourced by run-test.sh
#
# --- Global Script Variables (Defaults) ---
CLEANUP="true"
# Check if all components were filtered (idempotency validation)
# Returns 0 (true) if push-snapshot task was skipped, 1 (false) otherwise
were_all_components_filtered() {
local release_name=$1
# Check if all components were filtered by seeing if push-snapshot was skipped
is_task_skipped "${release_name}" "push-snapshot"
}
# Verify a single release has valid artifacts and image can be pulled
verify_single_release() {
local release_name=$1
echo "Verifying Release contents for ${release_name}..."
local release_json
release_json=$(get_release_json "${release_name}")
if [ -z "$release_json" ]; then
log_error "Could not retrieve Release JSON for ${release_name}"
fi
local failures=0
local image_url image_arch image_shasum
image_url=$(jq -r '.status.artifacts.images[0]?.urls[0] // ""' <<< "${release_json}")
image_shasum=$(jq -r '.status.artifacts.images[0]?.shasum // ""' <<< "${release_json}")
echo "Checking Image URL..."
if [ -n "${image_url}" ]; then
echo "β
οΈ image_url: ${image_url}"
else
echo "π΄ image_url was empty"
failures=$((failures+1))
fi
if [ -n "${PTSV_EXPECTED_ARCHES:-}" ]; then
local image_arches
image_arches=$(jq -r '.status.artifacts.images[0]?.arches // [] | sort | join(" ")' <<< "${release_json}")
if [ "${image_arches}" = "${PTSV_EXPECTED_ARCHES}" ]; then
echo "β
οΈ Found required image arches: $PTSV_EXPECTED_ARCHES"
else
echo "π΄ Expected image arches: '$PTSV_EXPECTED_ARCHES', found: ${image_arches}"
failures=$((failures+1))
fi
else
image_arch=$(jq -r '.status.artifacts.images[0]?.arches[0] // ""' <<< "${release_json}")
echo "Checking Image Arch..."
if [ -n "${image_arch}" ]; then
echo "β
οΈ image_arch: ${image_arch}"
else
echo "π΄ image_arch was empty"
failures=$((failures+1))
fi
fi
echo "Checking Image Shasum..."
if [ -n "${image_shasum}" ]; then
echo "β
οΈ image_shasum: ${image_shasum}"
else
echo "π΄ image_shasum was empty"
failures=$((failures+1))
fi
echo "Verifying image pullability with skopeo..."
set +e
"${SUITE_DIR}/../scripts/skopeo-verify-image.sh" \
"${image_url}" "${image_shasum}" \
"${SUITE_DIR}/resources/managed/secrets/managed-secrets.yaml"
skopeo_return_code=$?
set -e
if [ "${skopeo_return_code}" -ne 0 ]; then
failures=$((failures+1))
fi
if [ "${failures}" -gt 0 ]; then
echo "π΄ Release verification FAILED with ${failures} failure(s)!"
return 1
else
echo "β
οΈ All release checks passed."
return 0
fi
}
# Function to verify Release contents - called by run-test.sh after first release completes
# This function implements the idempotent test logic:
# 1. Verify first release pushed components
# 2. Create second release with same snapshot
# 3. Verify second release filtered all components
verify_release_contents() {
echo ""
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo " Idempotent Release Test - Phase 1: First Release Verification"
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
# RELEASE_NAMES is set by wait_for_releases in run-test.sh
local first_release_name
first_release_name=$(echo "${RELEASE_NAMES}" | awk '{print $1}')
echo "First release: ${first_release_name}"
# Verify first release was NOT filtered (components should be pushed)
echo "Checking if first release pushed components..."
if were_all_components_filtered "${first_release_name}"; then
log_error "First release should NOT have filtered components, but push-snapshot was skipped"
fi
echo "β
First release pushed components (expected behavior)"
# Verify first release artifacts
if ! verify_single_release "${first_release_name}"; then
log_error "First release verification failed"
fi
# Get the snapshot from the first release for the second release
local first_release_json
first_release_json=$(get_release_json "${first_release_name}")
local snapshot_name
snapshot_name=$(jq -r '.spec.snapshot' <<< "${first_release_json}")
if [ -z "${snapshot_name}" ] || [ "${snapshot_name}" == "null" ]; then
log_error "Could not get snapshot name from first release"
fi
echo "Using snapshot: ${snapshot_name}"
echo ""
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo " Idempotent Release Test - Phase 2: Second Release (Idempotent)"
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
# Create second release with the SAME snapshot
local second_release_name="idempotent-retry-${uuid}"
echo "Creating second release: ${second_release_name}"
cat <<EOF | kubectl apply -f -
apiVersion: appstudio.redhat.com/v1alpha1
kind: Release
metadata:
name: ${second_release_name}
namespace: ${tenant_namespace}
labels:
originating-tool: "${originating_tool}"
test-type: "idempotent-second-release"
spec:
snapshot: ${snapshot_name}
releasePlan: ${release_plan_name}
EOF
# Wait for second release to complete
echo "Waiting for second release to complete..."
export RELEASE_NAME="${second_release_name}"
export RELEASE_NAMESPACE="${tenant_namespace}"
"${SUITE_DIR}/../scripts/wait-for-release.sh"
echo ""
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo " Idempotent Release Test - Phase 3: Idempotent Behavior Verification"
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
# Verify second release filtered all components (idempotent behavior)
echo "Checking if second release filtered all components..."
if were_all_components_filtered "${second_release_name}"; then
echo "β
Second release filtered all components (idempotent behavior confirmed)"
else
log_error "Second release should have filtered all components, but push-snapshot ran"
fi
# Verify artifact consistency
echo ""
echo "Verifying artifact consistency..."
local second_release_json
second_release_json=$(get_release_json "${second_release_name}")
local artifacts_1 artifacts_2
artifacts_1=$(jq -S '.status.artifacts.images[0].shasum // "null"' <<< "${first_release_json}")
artifacts_2=$(jq -S '.status.artifacts.images[0].shasum // "null"' <<< "${second_release_json}")
# Second release may have no artifacts if all components were filtered
if [ "${artifacts_2}" == "\"null\"" ] || [ "${artifacts_2}" == "null" ]; then
echo "β
Second release has no artifacts (expected - all components filtered, push-snapshot skipped)"
echo " First release pushed: ${artifacts_1}"
echo " Second release skipped push (idempotent)"
elif [ "${artifacts_1}" == "${artifacts_2}" ]; then
echo "β
Both releases report identical artifact digests"
else
echo "First release artifacts: ${artifacts_1}"
echo "Second release artifacts: ${artifacts_2}"
log_error "Releases report different artifacts: ${artifacts_1} vs ${artifacts_2}"
fi
echo ""
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo " β
IDEMPOTENT RELEASE TEST PASSED"
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
echo "Summary:"
echo " β’ First release pushed 1 component"
echo " β’ Second release filtered component (already released)"
echo " β’ Artifact consistency: Verified"
echo " β’ Idempotent behavior: β
CONFIRMED"
echo ""
}