github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/tests/suites/refresh/refresh.sh (about) 1 run_refresh_local() { 2 # Test a plain juju refresh with a local charm 3 echo 4 5 model_name="test-refresh-local" 6 file="${TEST_DIR}/${model_name}.log" 7 charm_name="${TEST_DIR}/ubuntu.charm" 8 9 ensure "${model_name}" "${file}" 10 11 juju download ubuntu --no-progress - >"${charm_name}" 12 juju deploy "${charm_name}" ubuntu 13 wait_for "ubuntu" "$(idle_condition "ubuntu")" 14 15 OUT=$(juju refresh ubuntu --path "${charm_name}" 2>&1 || true) 16 if echo "${OUT}" | grep -E -vq "Added local charm"; then 17 # shellcheck disable=SC2046 18 echo $(red "failed refreshing charm: ${OUT}") 19 exit 5 20 fi 21 # shellcheck disable=SC2059 22 printf "${OUT}\n" 23 24 # format: Added charm-store charm "ubuntu", revision 21 in channel stable, to the model 25 revision=$(echo "${OUT}" | awk 'BEGIN{FS=","} {print $2}' | awk 'BEGIN{FS=" "} {print $2}') 26 27 wait_for "ubuntu" "$(charm_rev "ubuntu" "${revision}")" 28 wait_for "ubuntu" "$(idle_condition "ubuntu")" 29 30 destroy_model "${model_name}" 31 } 32 33 run_refresh_local_resources() { 34 # Test a plain juju refresh with a local charm 35 echo 36 37 model_name="test-refresh-local-resources" 38 file="${TEST_DIR}/${model_name}.log" 39 charm_name="${TEST_DIR}/juju-qa-test.charm" 40 41 ensure "${model_name}" "${file}" 42 43 juju download juju-qa-test --no-progress - >"${charm_name}" 44 # In 2.9 this charm is deploying with xenial. However there's 45 # a bug in charm, opening the resource file throws: 46 # TypeError: invalid file 47 # The charm is using python 3. No error in ubuntu 20.04. 48 juju deploy "${charm_name}" juju-qa-test --series focal --resource foo-file="./tests/suites/resources/foo-file.txt" 49 wait_for "juju-qa-test" "$(idle_condition "juju-qa-test")" 50 51 juju refresh juju-qa-test --path "${charm_name}" 52 53 wait_for "juju-qa-test" "$(charm_rev "juju-qa-test" "1")" 54 wait_for "juju-qa-test" "$(idle_condition "juju-qa-test")" 55 56 juju config juju-qa-test foo-file=true 57 # wait for config-changed, the charm will update the status 58 # to include the contents of foo-file.txt 59 wait_for "resource line one: did the resource attach?" "$(workload_status juju-qa-test 0).message" 60 61 destroy_model "${model_name}" 62 } 63 64 run_refresh_channel() { 65 # Test juju refresh from one channel to another 66 echo 67 68 model_name="test-refresh-channel" 69 file="${TEST_DIR}/${model_name}.log" 70 71 ensure "${model_name}" "${file}" 72 73 juju deploy juju-qa-test 74 wait_for "juju-qa-test" "$(idle_condition "juju-qa-test")" 75 76 OUT=$(juju refresh juju-qa-test --channel 2.0/edge 2>&1 || true) 77 # shellcheck disable=SC2059 78 printf "${OUT}\n" 79 80 # format: Added charm-store charm "ubuntu", revision 21 in channel stable, to the model 81 revision=$(echo "${OUT}" | awk 'BEGIN{FS=","} {print $2}' | awk 'BEGIN{FS=" "} {print $2}') 82 83 wait_for "juju-qa-test" "$(charm_rev "juju-qa-test" "${revision}")" 84 wait_for "juju-qa-test" "$(charm_channel "juju-qa-test" "2.0/edge")" 85 wait_for "juju-qa-test" "$(idle_condition "juju-qa-test")" 86 87 destroy_model "${model_name}" 88 } 89 90 run_refresh_channel_no_new_revision() { 91 # Test juju refresh from one channel to another, with no new 92 # charm revision. 93 echo 94 95 model_name="test-refresh-channel-no-new-revision" 96 file="${TEST_DIR}/${model_name}.log" 97 98 ensure "${model_name}" "${file}" 99 100 juju deploy juju-qa-fixed-rev 101 wait_for "juju-qa-fixed-rev" "$(idle_condition "juju-qa-fixed-rev")" 102 # get revision to ensure it doesn't change 103 cs_revision=$(juju status --format json | jq -S '.applications | .["juju-qa-fixed-rev"] | .["charm-rev"]') 104 105 juju refresh juju-qa-fixed-rev --channel edge 106 107 wait_for "juju-qa-fixed-rev" "$(charm_channel "juju-qa-fixed-rev" "latest/edge")" 108 wait_for "juju-qa-fixed-rev" "$(charm_rev "juju-qa-fixed-rev" "${cs_revision}")" 109 wait_for "juju-qa-fixed-rev" "$(idle_condition "juju-qa-fixed-rev")" 110 111 destroy_model "${model_name}" 112 } 113 114 run_refresh_revision() { 115 # Test juju refresh from revision to another 116 echo 117 118 model_name="test-refresh-revision" 119 file="${TEST_DIR}/${model_name}.log" 120 121 ensure "${model_name}" "${file}" 122 123 juju deploy juju-qa-test --revision 22 --channel stable --series focal 124 wait_for "juju-qa-test" "$(idle_condition "juju-qa-test")" 125 126 # refresh to a revision not at the tip of the stable channel 127 juju refresh juju-qa-test --revision 23 128 wait_for "juju-qa-test" "$(charm_rev "juju-qa-test" "23")" 129 wait_for "juju-qa-test" "$(charm_channel "juju-qa-test" "latest/stable")" 130 wait_for "juju-qa-test" "$(idle_condition "juju-qa-test")" 131 132 # do a generic refresh, should pick up revision from latest stable 133 OUT=$(juju refresh juju-qa-test 2>&1 || true) 134 # shellcheck disable=SC2059 135 printf "${OUT}\n" 136 137 # format: Added charm-store charm "ubuntu", revision 21 in channel stable, to the model 138 revision=$(echo "${OUT}" | awk 'BEGIN{FS=","} {print $2}' | awk 'BEGIN{FS=" "} {print $2}') 139 140 wait_for "juju-qa-test" "$(charm_rev "juju-qa-test" "${revision}")" 141 wait_for "juju-qa-test" "$(charm_channel "juju-qa-test" "latest/stable")" 142 wait_for "juju-qa-test" "$(idle_condition "juju-qa-test")" 143 144 destroy_model "${model_name}" 145 } 146 147 test_basic() { 148 if [ "$(skip 'test_basic')" ]; then 149 echo "==> TEST SKIPPED: basic refresh" 150 return 151 fi 152 153 ( 154 set_verbosity 155 156 cd .. || exit 157 158 run "run_refresh_local" 159 run "run_refresh_local_resources" 160 run "run_refresh_channel" 161 run "run_refresh_channel_no_new_revision" 162 run "run_refresh_revision" 163 ) 164 }