github.com/dmaizel/tests@v0.0.0-20210728163746-cae6a2d9cee8/integration/pmem/pmem_test.sh (about)

     1  #!/bin/bash
     2  #
     3  # Copyright (c) 2021 Intel Corporation
     4  #
     5  # SPDX-License-Identifier: Apache-2.0
     6  #
     7  
     8  set -o errexit
     9  set -o nounset
    10  set -o pipefail
    11  set -o errtrace
    12  
    13  dir_path=$(dirname "$0")
    14  source "${dir_path}/../../lib/common.bash"
    15  source "${dir_path}/../../.ci/lib.sh"
    16  source /etc/os-release || source /usr/lib/os-release
    17  TEST_INITRD="${TEST_INITRD:-no}"
    18  experimental_qemu="${experimental_qemu:-false}"
    19  arch=$("${dir_path}"/../../.ci/kata-arch.sh -d)
    20  
    21  if [ "$TEST_INITRD" == "yes" ]; then
    22  	echo "Skip pmem test: nvdimm is disabled when initrd is used as rootfs"
    23  	exit 0
    24  fi
    25  
    26  if [ "$experimental_qemu" == "true" ]; then
    27  	echo "Skip pmem test: experimental qemu doesn't have libpmem support"
    28  	exit 0
    29  fi
    30  
    31  if [ "$arch" == "aarch64" ]; then
    32  	echo "Skip pmem test: $arch can't ensure data persistence for the lack of libpmem support"
    33  	exit 0
    34  fi
    35  
    36  if [ "${ID}" != "ubuntu" ]; then
    37  	echo "Skip pmem test: ${ID} distro is not supported"
    38  	exit 0
    39  fi
    40  
    41  init() {
    42  	${dir_path}/../../integration/kubernetes/init.sh
    43  	docker run -d -p 5000:5000 --restart=always --name registry registry:2
    44  }
    45  
    46  cleanup() {
    47  	set +e
    48  	kubectl describe pod/my-csi-kata-app
    49  	kubectl get pod --all-namespaces
    50  
    51  	pushd pmem-csi
    52  	kubectl delete -f "deploy/common/pmem-kata-app.yaml"
    53  	kubectl delete -f "deploy/common/pmem-kata-pvc.yaml"
    54  	kubectl delete -f "deploy/common/pmem-storageclass-ext4-kata.yaml"
    55  	kubectl delete PmemCSIDeployment/pmem-csi.intel.com
    56  	kubectl delete -f "deploy/crd/pmem-csi.intel.com_pmemcsideployments.yaml"
    57  	kubectl delete -f "deploy/operator/pmem-csi-operator.yaml"
    58  	popd
    59  	rm -rf pmem-csi
    60  
    61  	${dir_path}/../../integration/kubernetes/cleanup_env.sh
    62  
    63  	docker rm -f $(docker ps -aq)
    64  	rid=$(docker images -q registry:2)
    65  	docker rmi -f $(docker images -q | sed '/'$rid'/d')
    66  }
    67  
    68  run_test() {
    69  	kubectl exec pod/my-csi-kata-app -- df /data | grep pmem
    70  	kubectl exec pod/my-csi-kata-app -- mount | grep pmem | grep data | grep dax
    71  }
    72  
    73  setup_pmem_csi() {
    74  	git clone https://github.com/intel/pmem-csi/
    75  	pushd pmem-csi
    76  
    77  	make build-images
    78  	make push-images
    79  
    80  	kubectl label node $(hostname) storage=pmem
    81  	kubectl label node $(hostname) katacontainers.io/kata-runtime=true
    82  
    83  	oper_yml="deploy/operator/pmem-csi-operator.yaml"
    84  	sed -i -e 's|image:.*|image: localhost:5000/pmem-csi-driver:canary|g' \
    85  		-e 's|imagePullPolicy:.*|imagePullPolicy: Always|g' \
    86  		${oper_yml}
    87  	kubectl apply -f "${oper_yml}"
    88  
    89  	kubectl apply -f deploy/crd/pmem-csi.intel.com_pmemcsideployments.yaml
    90  
    91  	kubectl create -f - <<EOF
    92  apiVersion: pmem-csi.intel.com/v1beta1
    93  kind: PmemCSIDeployment
    94  metadata:
    95    name: pmem-csi.intel.com
    96  spec:
    97    deviceMode: direct
    98    nodeSelector:
    99      storage: pmem
   100  EOF
   101  
   102  	stclass_yml="deploy/common/pmem-storageclass-ext4-kata.yaml"
   103  	kubectl apply -f "${stclass_yml}"
   104  
   105  	pvc_yml="deploy/common/pmem-kata-pvc.yaml"
   106  	kubectl apply -f "${pvc_yml}"
   107  
   108  	app_yml="deploy/common/pmem-kata-app.yaml"
   109  	sed -i -e 's|io.katacontainers.config.hypervisor.memory_offset:.*|io.katacontainers.config.hypervisor.memory_offset: "4294967296"|g' \
   110  		-e 's|runtimeClassName:.*|runtimeClassName: kata|g' \
   111  		"${app_yml}"
   112  	kubectl apply -f "${app_yml}"
   113  	popd
   114  
   115  	kubectl wait --for=condition=Ready --timeout=90s pod/my-csi-kata-app
   116  	sleep 5
   117  }
   118  
   119  main() {
   120  	trap cleanup EXIT QUIT KILL
   121  	init
   122  	setup_pmem_csi
   123  	run_test
   124  }
   125  
   126  main