* 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 \
 | 
					    && apt-get clean \
 | 
				
			||||||
    && rm -rf /var/lib/apt/lists/*
 | 
					    && 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
 | 
					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
 | 
					## Covered use cases
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The current tests are all bundled in [`test_e2e.py`](tests/test_e2e.py):
 | 
					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(){
 | 
					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
 | 
					  # 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" \
 | 
					  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 manifests)",target=/manifests \
 | 
				
			||||||
  --mount type=bind,source="$(readlink -f tests)",target=/tests \
 | 
					  --mount type=bind,source="$(readlink -f tests)",target=/tests \
 | 
				
			||||||
  --mount type=bind,source="$(readlink -f exec.sh)",target=/exec.sh \
 | 
					  --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(){
 | 
					function clean_up(){
 | 
				
			||||||
| 
						 | 
					@ -68,13 +68,14 @@ function clean_up(){
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function main(){
 | 
					function main(){
 | 
				
			||||||
 | 
					  echo "Entering main function..."
 | 
				
			||||||
  [[ -z ${NOCLEANUP-} ]] && trap "clean_up" QUIT TERM EXIT
 | 
					  [[ -z ${NOCLEANUP-} ]] && trap "clean_up" QUIT TERM EXIT
 | 
				
			||||||
  pull_images
 | 
					  pull_images
 | 
				
			||||||
  [[ ! -f ${kubeconfig_path} ]] && start_kind
 | 
					  [[ ! -f ${kubeconfig_path} ]] && start_kind
 | 
				
			||||||
  set_kind_api_server_ip
 | 
					  set_kind_api_server_ip
 | 
				
			||||||
  run_tests
 | 
					  shift
 | 
				
			||||||
 | 
					  run_tests $@
 | 
				
			||||||
  exit 0
 | 
					  exit 0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"$@"
 | 
					"$1" $@
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1069,7 +1069,10 @@ class K8s:
 | 
				
			||||||
                              stderr=subprocess.PIPE)
 | 
					                              stderr=subprocess.PIPE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_patroni_state(self, pod):
 | 
					    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):
 | 
					    def get_patroni_running_members(self, pod):
 | 
				
			||||||
        result = self.get_patroni_state(pod)
 | 
					        result = self.get_patroni_state(pod)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue