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  }