Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 54 additions & 45 deletions ci-operation-pr.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
# ./ci-operation-pr.sh nf <NF1> <PR1> [<PR2> ...] [<NF2> <PR3> ...] [OPTIONS]
# ./ci-operation-pr.sh nf <NF1> <PR1> [...] lib <LIB1> <PR1> [...] [OPTIONS]
# ./ci-operation-pr.sh lib <LIBRARY> <PR#> [OPTIONS]
# ./ci-operation-pr.sh free5gc <PR#> nf <NF1> <PR1> [<NF2> <PR2> ...] [OPTIONS]
# ./ci-operation-pr.sh free5gc <PR#> [nf <NF1> <PR1> [<NF2> <PR2> ...]] [OPTIONS]
#
# OPTIONS:
# --skip-docker Skip Docker Compose tests
Expand Down Expand Up @@ -76,7 +76,7 @@ usage() {
echo " $0 nf <NF1> <PR1> [<PR2> ...] [<NF2> <PR3> ...] [OPTIONS]"
echo " $0 nf <NF1> <PR1> [...] lib <LIB1> <PR1> [...] [OPTIONS]"
echo " $0 lib <LIBRARY> <PR#> [OPTIONS]"
echo " $0 free5gc <PR#> nf <NF1> <PR1> [<NF2> <PR2> ...] [OPTIONS]"
echo " $0 free5gc <PR#> [nf <NF1> <PR1> [<NF2> <PR2> ...]] [OPTIONS]"
echo ""
echo "OPTIONS:"
echo " --skip-docker Skip Docker Compose tests"
Expand All @@ -89,6 +89,7 @@ usage() {
echo " $0 nf smf 170 183 udm 80 81 amf 50 # Multiple NFs with multiple PRs"
echo " $0 nf udm 76 lib util 37 # NF PR + library PR combined"
echo " $0 lib openapi 67"
echo " $0 free5gc 787 # Test main repo PR #787 only"
echo " $0 free5gc 787 nf amf 194 # Test main repo PR #787 with AMF PR #194"
echo ""
echo "Supported NFs: $SUPPORTED_NFS"
Expand Down Expand Up @@ -151,15 +152,21 @@ is_number() {
[[ "$1" =~ ^[0-9]+$ ]]
}

# Check minimum args
if [ $# -lt 3 ]; then
usage
fi

# Parse type
TYPE=$1
shift

# Check minimum args based on command type
if [ "$TYPE" = "free5gc" ]; then
if [ $# -lt 1 ]; then
usage
fi
else
if [ $# -lt 2 ]; then
usage
fi
fi

# Parse optional flags first (find and remove them from args)
SKIP_DOCKER=false
SKIP_TESTALL=false
Expand All @@ -186,10 +193,10 @@ FREE5GC_PR=""

case $TYPE in
free5gc)
# Format: free5gc <PR#> nf <NF1> <PR1> [<NF2> <PR2> ...]
if [ ${#REMAINING_ARGS[@]} -lt 4 ]; then
echo "Error: free5gc PR number and at least one NF with PR required"
echo "Format: $0 free5gc <PR#> nf <NF1> <PR1> ..."
# Format: free5gc <PR#> [nf <NF1> <PR1> [<NF2> <PR2> ...]]
if [ ${#REMAINING_ARGS[@]} -lt 1 ]; then
echo "Error: free5gc PR number required"
echo "Format: $0 free5gc <PR#> [nf <NF1> <PR1> ...]"
usage
fi

Expand All @@ -200,41 +207,43 @@ case $TYPE in
fi
FREE5GC_PR="${REMAINING_ARGS[0]}"

# Second argument should be 'nf'
if [ "${REMAINING_ARGS[1]}" != "nf" ]; then
echo "Error: Expected 'nf' after free5gc PR number, got '${REMAINING_ARGS[1]}'"
usage
fi

# Parse remaining NF/PR pairs (starting from index 2)
CURRENT_NF=""
for ((i=2; i<${#REMAINING_ARGS[@]}; i++)); do
arg="${REMAINING_ARGS[$i]}"
if is_nf "$arg"; then
CURRENT_NF="$arg"
if [ -z "${NF_PRS[$CURRENT_NF]}" ]; then
NF_PRS[$CURRENT_NF]=""
fi
elif is_number "$arg"; then
if [ -z "$CURRENT_NF" ]; then
echo "Error: PR number '$arg' without NF name"
usage
fi
if [ -z "${NF_PRS[$CURRENT_NF]}" ]; then
NF_PRS[$CURRENT_NF]="$arg"
else
NF_PRS[$CURRENT_NF]="${NF_PRS[$CURRENT_NF]} $arg"
fi
else
echo "Error: Unknown argument '$arg' (not a valid NF or PR number)"
# Optional second argument can start NF parsing.
if [ ${#REMAINING_ARGS[@]} -gt 1 ]; then
if [ "${REMAINING_ARGS[1]}" != "nf" ]; then
echo "Error: Expected 'nf' after free5gc PR number, got '${REMAINING_ARGS[1]}'"
usage
fi
done

# Validate that we have at least one NF with PRs
if [ ${#NF_PRS[@]} -eq 0 ]; then
echo "Error: No valid NF/PR pairs found"
usage

if [ ${#REMAINING_ARGS[@]} -lt 4 ]; then
echo "Error: 'nf' was provided but no NF/PR pairs were found"
echo "Format: $0 free5gc <PR#> nf <NF1> <PR1> ..."
usage
fi

# Parse remaining NF/PR pairs (starting from index 2)
CURRENT_NF=""
for ((i=2; i<${#REMAINING_ARGS[@]}; i++)); do
arg="${REMAINING_ARGS[$i]}"
if is_nf "$arg"; then
CURRENT_NF="$arg"
if [ -z "${NF_PRS[$CURRENT_NF]}" ]; then
NF_PRS[$CURRENT_NF]=""
fi
elif is_number "$arg"; then
if [ -z "$CURRENT_NF" ]; then
echo "Error: PR number '$arg' without NF name"
usage
fi
if [ -z "${NF_PRS[$CURRENT_NF]}" ]; then
NF_PRS[$CURRENT_NF]="$arg"
else
NF_PRS[$CURRENT_NF]="${NF_PRS[$CURRENT_NF]} $arg"
fi
else
echo "Error: Unknown argument '$arg' (not a valid NF or PR number)"
usage
fi
done
fi

# Set TYPE to nf for later processing, but remember we have FREE5GC_PR
Expand Down Expand Up @@ -872,7 +881,7 @@ if [ "$SKIP_DOCKER" = false ]; then
log_warn "Failed to start $scenario"
DOCKER_FAILED="$DOCKER_FAILED $scenario"
echo " $scenario: FAIL (compose up failed)" >> "$REPORT_FILE"
sudo docker compose -f "$COMPOSE_FILE" down 2>/dev/null || true
sudo docker compose -f "$COMPOSE_FILE" down -v 2>/dev/null || true
continue
fi
sleep 5
Expand Down
6 changes: 3 additions & 3 deletions ci-operation.sh
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,13 @@ main() {
"down")
case "$2" in
"basic-charging")
docker compose -f docker-compose-basic.yaml down
docker compose -f docker-compose-basic.yaml down -v
;;
"ulcl-ti")
docker compose -f docker-compose-ulcl-ti.yaml down
docker compose -f docker-compose-ulcl-ti.yaml down -v
;;
"ulcl-mp")
docker compose -f docker-compose-ulcl-mp.yaml down
docker compose -f docker-compose-ulcl-mp.yaml down -v
;;
*)
usage
Expand Down
50 changes: 50 additions & 0 deletions testing_output/pr_test_free5gc_1062_20260617_190608.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
==========================================
free5GC PR Test Report
==========================================
Date: Wed Jun 17 07:06:08 PM CST 2026
Type: nf
Main free5gc Repo PR: #1062
NF/PR Configuration:

[STEP 1] Pull: SUCCESS
[STEP 2] Fetch/Merge PRs:
- free5gc #1062: MERGED
[STEP 3] Build: SUCCESS

[STEP 4] Unit Tests:
TestRegistration: PASS
TestGUTIRegistration: PASS
TestServiceRequest: PASS
TestXnHandover: PASS
TestN2Handover: PASS
TestDeregistration: PASS
TestPDUSessionReleaseRequest: PASS
TestPaging: PASS
TestReSynchronization: PASS
TestDuplicateRegistration: PASS
TestEAPAKAPrimeAuthentication: PASS
TestMultiAmfRegistration: PASS
TestNasReroute: PASS
TestDC: PASS
TestDynamicDC: PASS
TestXnDCHandover: PASS
TestNon3GPP: PASS
TestOAuth2Callback: PASS
TestTngf: PASS

Summary:
Passed: TestRegistration TestGUTIRegistration TestServiceRequest TestXnHandover TestN2Handover TestDeregistration TestPDUSessionReleaseRequest TestPaging TestReSynchronization TestDuplicateRegistration TestEAPAKAPrimeAuthentication TestMultiAmfRegistration TestNasReroute TestDC TestDynamicDC TestXnDCHandover TestNon3GPP TestOAuth2Callback TestTngf
[STEP 5] Docker Build: SUCCESS

[STEP 6] Docker Compose Tests:
basic: FAIL
ulcl-ti: FAIL
ulcl-mp: PASS

Summary:
Passed: ulcl-mp
Failed: basic ulcl-ti

==========================================
Test Complete: Wed Jun 17 07:22:49 PM CST 2026
==========================================
27 changes: 27 additions & 0 deletions testing_output/pr_test_free5gc_1062_20260617_193254.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
==========================================
free5GC PR Test Report
==========================================
Date: Wed Jun 17 07:32:54 PM CST 2026
Type: nf
Main free5gc Repo PR: #1062
NF/PR Configuration:

[STEP 1] Pull: SKIPPED
[STEP 2] Fetch/Merge PRs:
- free5gc #1062: MERGED
[STEP 3] Build: SUCCESS
[STEP 4] Unit Tests: SKIPPED
[STEP 5] Docker Build: SUCCESS

[STEP 6] Docker Compose Tests:
basic: FAIL
ulcl-ti: PASS
ulcl-mp: PASS

Summary:
Passed: ulcl-ti ulcl-mp
Failed: basic

==========================================
Test Complete: Wed Jun 17 07:37:45 PM CST 2026
==========================================