* Make lazy upgrade test work reliable
* Allow Docker image to take parameters to overwrite unittest execution * Add documentation for running individual tests * Fixed String encoding in Patorni state check and error case
This commit is contained in:
		
							parent
							
								
									4fc8ca384d
								
							
						
					
					
						commit
						c6c4c4cc8a
					
				| 
						 | 
				
			
			@ -21,4 +21,5 @@ RUN apt-get update \
 | 
			
		|||
    && apt-get clean \
 | 
			
		||||
    && rm -rf /var/lib/apt/lists/*
 | 
			
		||||
 | 
			
		||||
ENTRYPOINT ["python3", "-m", "unittest", "discover", "--failfast", "--start-directory", "/tests", "-v"]
 | 
			
		||||
ENTRYPOINT ["python3", "-m", "unittest", "--failfast", "-v"]
 | 
			
		||||
CMD ["discover","--start-directory","/tests"]
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +40,25 @@ To run the end 2 end test and keep the kind state execute:
 | 
			
		|||
NOCLEANUP=True ./run.sh
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Run indidual test
 | 
			
		||||
 | 
			
		||||
After having executed a normal E2E run with `NOCLEANUP=True` Kind still continues to run, allowing you subsequent test runs.
 | 
			
		||||
 | 
			
		||||
To run an individual test, run the following command in the `e2e` directory
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
NOCLEANUP=True ./run.sh main tests.test_e2e.EndToEndTestCase.test_lazy_spilo_upgrade
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Inspecting Kind
 | 
			
		||||
 | 
			
		||||
If you want to inspect Kind/Kubernetes cluster, use the following script to exec into the K8s setup and then use `kubectl`
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
./run_test_image.sh
 | 
			
		||||
kubectl get pods
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Covered use cases
 | 
			
		||||
 | 
			
		||||
The current tests are all bundled in [`test_e2e.py`](tests/test_e2e.py):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										13
									
								
								e2e/run.sh
								
								
								
								
							
							
						
						
									
										13
									
								
								e2e/run.sh
								
								
								
								
							| 
						 | 
				
			
			@ -48,8 +48,8 @@ function set_kind_api_server_ip(){
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
function run_tests(){
 | 
			
		||||
  echo "Running tests..."
 | 
			
		||||
 | 
			
		||||
  echo "Running tests... image: ${e2e_test_runner_image}"
 | 
			
		||||
  echo $@
 | 
			
		||||
  # tests modify files in ./manifests, so we mount a copy of this directory done by the e2e Makefile
 | 
			
		||||
 | 
			
		||||
  docker run --rm --network=host -e "TERM=xterm-256color" \
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ function run_tests(){
 | 
			
		|||
  --mount type=bind,source="$(readlink -f manifests)",target=/manifests \
 | 
			
		||||
  --mount type=bind,source="$(readlink -f tests)",target=/tests \
 | 
			
		||||
  --mount type=bind,source="$(readlink -f exec.sh)",target=/exec.sh \
 | 
			
		||||
  -e OPERATOR_IMAGE="${operator_image}" "${e2e_test_runner_image}"
 | 
			
		||||
  -e OPERATOR_IMAGE="${operator_image}" "${e2e_test_runner_image}" $@
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function clean_up(){
 | 
			
		||||
| 
						 | 
				
			
			@ -68,13 +68,14 @@ function clean_up(){
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
function main(){
 | 
			
		||||
 | 
			
		||||
  echo "Entering main function..."
 | 
			
		||||
  [[ -z ${NOCLEANUP-} ]] && trap "clean_up" QUIT TERM EXIT
 | 
			
		||||
  pull_images
 | 
			
		||||
  [[ ! -f ${kubeconfig_path} ]] && start_kind
 | 
			
		||||
  set_kind_api_server_ip
 | 
			
		||||
  run_tests
 | 
			
		||||
  shift
 | 
			
		||||
  run_tests $@
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
"$@"
 | 
			
		||||
"$1" $@
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1069,7 +1069,10 @@ class K8s:
 | 
			
		|||
                              stderr=subprocess.PIPE)
 | 
			
		||||
 | 
			
		||||
    def get_patroni_state(self, pod):
 | 
			
		||||
        return json.loads(self.exec_with_kubectl(pod, "patronictl list -f json").stdout)
 | 
			
		||||
        r = self.exec_with_kubectl(pod, "patronictl list -f json")
 | 
			
		||||
        if not r.returncode == 0 or not r.stdout.decode()[0:1]=="[":
 | 
			
		||||
            return []
 | 
			
		||||
        return json.loads(r.stdout.decode())
 | 
			
		||||
 | 
			
		||||
    def get_patroni_running_members(self, pod):
 | 
			
		||||
        result = self.get_patroni_state(pod)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue