Merge "Set of TCs to test K8s layer via Robot"
authorNaga Sugguna <ns156u@att.com>
Thu, 18 Apr 2019 20:22:33 +0000 (20:22 +0000)
committerGerrit Code Review <gerrit@akraino.org>
Thu, 18 Apr 2019 20:22:33 +0000 (20:22 +0000)
13 files changed:
.gitignore [new file with mode: 0644]
.gitreview [new file with mode: 0644]
bluval/README.md [new file with mode: 0644]
bluval/bluval-base.yaml [new file with mode: 0644]
bluval/bluval.py [new file with mode: 0644]
bluval/requirements.txt [new file with mode: 0644]
docker/Makefile [new file with mode: 0644]
docker/README.rst [new file with mode: 0644]
docker/build.mk [new file with mode: 0644]
docker/k8s/Dockerfile [new file with mode: 0644]
docker/k8s/Makefile [new file with mode: 0644]
docker/k8s/pip-requirements.txt [new file with mode: 0644]
helloworld/helloworld.robot [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..59230bc
--- /dev/null
@@ -0,0 +1,2 @@
+docker/manifest-tool
+*.sw?
diff --git a/.gitreview b/.gitreview
new file mode 100644 (file)
index 0000000..4b0d2fd
--- /dev/null
@@ -0,0 +1,5 @@
+[gerrit]
+host=gerrit.akraino.org
+port=29418
+project=validation.git
+defaultbranch=master
diff --git a/bluval/README.md b/bluval/README.md
new file mode 100644 (file)
index 0000000..0ccd6c5
--- /dev/null
@@ -0,0 +1,10 @@
+# BluVal
+
+## Installation
+
+Minimum required python verson is python3.5
+
+```
+python3 -m pip install -r requirements.txt
+```
+
diff --git a/bluval/bluval-base.yaml b/bluval/bluval-base.yaml
new file mode 100644 (file)
index 0000000..4a9ce70
--- /dev/null
@@ -0,0 +1,77 @@
+---
+##############################################################################
+# Copyright (c) 2019 AT&T Intellectual Property.                             #
+# Copyright (c) 2019 Nokia.                                                  #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License.                   #
+#                                                                            #
+# You may obtain a copy of the License at                                    #
+#       http://www.apache.org/licenses/LICENSE-2.0                           #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  #
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.           #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+##############################################################################
+blueprint:
+    name: base
+    sections:
+        - hw
+        - os
+        - networking
+        - k8s
+        - k8s_networking
+        - sds
+        - sdn
+        - vim
+    # Any hardware some basic tests
+    hw: &hw_base
+        -
+            name: bios_version
+            # something that can be evaluated to true or false
+            condition: true
+            what: /opt/akraino/validation/helloworld
+            # true or false, default is false
+            show_stopper: false
+    os: &os_base
+        -
+            name: os_version
+            what: /opt/akraino/validation/helloworld
+    networking: &networking
+        -
+            name: pxe_networking_test
+            what: /opt/akraino/validation/helloworld
+        -
+            name: routes_test
+            what: /opt/akraino/validation/helloworld
+    k8s: &k8s
+        -
+            name: conformance
+            what: /opt/akraino/validation/helloworld
+        -
+            name: e2e
+            what: /opt/akraino/validation/helloworld
+    k8s_networking: &k8s_networking
+        -
+            name: node_connectivity
+            what: /opt/akraino/validation/helloworld
+        -
+            name: pod_connectivity
+            what: /opt/akraino/validation/helloworld
+    # software defined storage
+    sds: &sds
+        -
+            name: sds
+            what: /opt/akraino/validation/helloworld
+    # software defined network
+    sdn: &sdn
+        -
+            name: sns
+            what: /opt/akraino/validation/helloworld
+    # Virtual Infrastructure Manager
+    vim: &vim
+        -
+            name: vim_basic
+            what: /opt/akraino/validation/helloworld
diff --git a/bluval/bluval.py b/bluval/bluval.py
new file mode 100644 (file)
index 0000000..c0c16de
--- /dev/null
@@ -0,0 +1,62 @@
+#!/usr/bin/python3
+##############################################################################
+# Copyright (c) 2019 AT&T Intellectual Property.                             #
+# Copyright (c) 2019 Nokia.                                                  #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License.                   #
+#                                                                            #
+# You may obtain a copy of the License at                                    #
+#       http://www.apache.org/licenses/LICENSE-2.0                           #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  #
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.           #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+##############################################################################
+"""This module parses yaml file, reads sections, testcases and executes each
+testcase
+"""
+
+import subprocess
+import sys
+import yaml
+
+def run_testcase(testcase):
+    """Runs a single testcase
+    """
+    show_stopper = testcase.get('show_stopper', False)
+
+    print('Executing testcase {}'.format(testcase['name']))
+    print('          show_stopper {}'.format(show_stopper))
+    cmd = 'robot {}'.format(testcase['what'])
+    print('Invoking {}'.format(cmd))
+    try:
+        status = subprocess.call(cmd, shell=True)
+        if status != 0 and show_stopper:
+            print('Show stopper testcase failed')
+            return status
+    except OSError:
+        print('Error while executing {}'.format(cmd))
+        return -1
+    return status
+
+
+def parse_yaml(testcase_loc):
+    """Parse yaml file and do tasks on each testcase
+    """
+    with open(testcase_loc) as testcase_file:
+        testcases = yaml.safe_load(testcase_file)
+    blueprint = testcases['blueprint']
+    for section in blueprint['sections']:
+        print('## Section {}'.format(section))
+        for testcase in blueprint[section]:
+            run_testcase(testcase)
+
+
+if __name__ == "__main__":
+    if len(sys.argv) != 2:
+        print('usage: bluval.py <testcase.yaml>')
+        sys.exit(1)
+    parse_yaml(sys.argv[1])
diff --git a/bluval/requirements.txt b/bluval/requirements.txt
new file mode 100644 (file)
index 0000000..c3726e8
--- /dev/null
@@ -0,0 +1 @@
+pyyaml
diff --git a/docker/Makefile b/docker/Makefile
new file mode 100644 (file)
index 0000000..65ad526
--- /dev/null
@@ -0,0 +1,36 @@
+##############################################################################
+# Copyright (c) 2019 AT&T, ENEA AB, Nokia and others                         #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License");            #
+# you maynot use this file except in compliance with the License.            #
+#                                                                            #
+# You may obtain a copy of the License at                                    #
+#       http://www.apache.org/licenses/LICENSE-2.0                           #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  #
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.           #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+##############################################################################
+
+SUBDIRS := $(wildcard */.)
+SUBDIRS_NAME := $(SUBDIRS:/.=)
+SUBDIRS_BUILD := $(SUBDIRS:/.=-build)
+SUBDIRS_PUSH := $(SUBDIRS:/.=-push)
+
+.PHONY: all
+all: $(SUBDIRS_NAME)
+
+.PHONY: build-all
+build-all: $(SUBDIRS_BUILD)
+
+.PHONY: $(SUBDIRS_NAME)
+$(SUBDIRS_NAME):
+       $(MAKE) -C $@
+
+.PHONY: $(SUBDIRS_BUILD)
+$(SUBDIRS_BUILD): $(SUBDIRS)
+       $(MAKE) -C $< build
+
+include build.mk
diff --git a/docker/README.rst b/docker/README.rst
new file mode 100644 (file)
index 0000000..8182b73
--- /dev/null
@@ -0,0 +1,37 @@
+.. ############################################################################
+.. Copyright (c) 2019 AT&T, ENEA AB, Nokia and others                         #
+..                                                                            #
+.. Licensed under the Apache License, Version 2.0 (the "License");            #
+.. you maynot use this file except in compliance with the License.            #
+..                                                                            #
+.. You may obtain a copy of the License at                                    #
+..       http://www.apache.org/licenses/LICENSE-2.0                           #
+..                                                                            #
+.. Unless required by applicable law or agreed to in writing, software        #
+.. distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  #
+.. WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.           #
+.. See the License for the specific language governing permissions and        #
+.. limitations under the License.                                             #
+.. ############################################################################
+
+
+Overview
+========
+
+The Makefile in this directory is used to build and push all
+the validation containers. The command to do that is:
+   make all REGISTRY=<dockerhub_registry>
+To just build the containers, use the command:
+   make build-all REGISTRY=<dockerhub_registry>
+
+The k8s container
+=================
+
+To build just the k8s container, use the command:
+   make k8s-build REGISTRY=<dockerhub_registry>
+To both build and push the container, use the command:
+   make k8s REGISTRY=<dockerhub_registry>
+
+Container should be started with the admin.conf file mounted:
+docker run -ti -v /home/jenkins/admin.conf:/root/.kube/config \
+<dockerhub_registry>/akraino_validation:k8s-latest /bin/sh
diff --git a/docker/build.mk b/docker/build.mk
new file mode 100644 (file)
index 0000000..dde61fe
--- /dev/null
@@ -0,0 +1,52 @@
+##############################################################################
+# Copyright (c) 2019 AT&T, ENEA AB, Nokia and others                         #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License");            #
+# you maynot use this file except in compliance with the License.            #
+#                                                                            #
+# You may obtain a copy of the License at                                    #
+#       http://www.apache.org/licenses/LICENSE-2.0                           #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  #
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.           #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+##############################################################################
+
+
+# declare the variables
+REGISTRY ?= # TBD
+NAME ?= akraino_validation
+TAG_PRE ?= $(notdir $(CURDIR))
+TAG_VER ?= latest
+DOCKERFILE ?= Dockerfile
+MTOOL ?= $(dir $(realpath $(lastword $(MAKEFILE_LIST))))/manifest-tool
+
+# get the architecture of the host
+HOST_ARCH = amd64
+ifeq ($(shell uname -m), aarch64)
+    HOST_ARCH = arm64
+endif
+
+$(MTOOL):
+       wget https://github.com/estesp/manifest-tool/releases/download/v0.9.0/manifest-tool-linux-$(HOST_ARCH) -O $@
+       sudo chmod +x $@
+
+.PHONY: .build
+.build:
+       docker build \
+               -t $(REGISTRY)/$(NAME):$(TAG_PRE)-$(HOST_ARCH)-$(TAG_VER) \
+               -f $(DOCKERFILE) \
+               .
+
+.PHONY: .push_image
+.push_image: .build
+       docker push $(REGISTRY)/$(NAME):$(TAG_PRE)-$(HOST_ARCH)-$(TAG_VER)
+
+.PHONY: .push_manifest
+.push_manifest: $(MTOOL)
+       $(MTOOL) push from-args \
+               --platforms linux/amd64,linux/arm64 \
+               --template $(REGISTRY)/$(NAME):$(TAG_PRE)-ARCH-$(TAG_VER) \
+               --target $(REGISTRY)/$(NAME):$(TAG_PRE)-$(TAG_VER)
diff --git a/docker/k8s/Dockerfile b/docker/k8s/Dockerfile
new file mode 100644 (file)
index 0000000..1d41d00
--- /dev/null
@@ -0,0 +1,65 @@
+##############################################################################
+# Copyright (c) 2019 AT&T, ENEA AB, Nokia and others                         #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License");            #
+# you maynot use this file except in compliance with the License.            #
+#                                                                            #
+# You may obtain a copy of the License at                                    #
+#       http://www.apache.org/licenses/LICENSE-2.0                           #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  #
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.           #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+##############################################################################
+
+# ref: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#use-multi-stage-builds
+FROM golang:alpine3.9 as build
+
+# Sonobuoy supports Kubernetes versions 1.11, 1.12 and 1.13
+ARG K8S_TAG=v1.13.0
+
+# Install dependencies
+COPY pip-requirements.txt /wheels/requirements/pip-requirements.txt
+RUN apk --no-cache add --update \
+        openssl \
+        python3 \
+        bash \
+        findutils \
+        gcc \
+        git \
+        grep \
+        libc-dev \
+        libffi \
+        libffi-dev \
+        make \
+        openssl-dev \
+        python3-dev \
+        py3-pip \
+        rsync
+
+# Build binaries; detect the architecture automatically (default is amd64)
+RUN git clone https://github.com/kubernetes/kubernetes /src/k8s.io/kubernetes
+RUN if [ $(uname -m) == 'aarch64' ]; then HOST_ARCH=arm64; else HOST_ARCH=amd64; fi && \
+    echo "Building docker on $HOST_ARCH" && \
+    cd /src/k8s.io/kubernetes && \
+    git checkout $K8S_TAG && \
+    make kubectl ginkgo && \
+    make WHAT=test/e2e/e2e.test ARCH=$HOST_ARCH
+RUN go get -u -v github.com/heptio/sonobuoy
+
+WORKDIR /wheels
+RUN pip3 install wheel
+RUN pip3 wheel -r /wheels/requirements/pip-requirements.txt
+
+# Copy binaries in the final contaier and install robot framework
+FROM python:3.6-alpine3.9
+COPY --from=build /src/k8s.io/kubernetes/_output/bin /usr/local/bin
+COPY --from=build /go/bin/sonobuoy /bin/sonobuoy
+COPY --from=build /wheels /wheels
+
+RUN pip3 install -r /wheels/requirements/pip-requirements.txt \
+                 -f /wheels && \
+     rm -rf /wheels && \
+     rm -rf /root/.cache/pip/*
diff --git a/docker/k8s/Makefile b/docker/k8s/Makefile
new file mode 100644 (file)
index 0000000..a5b4099
--- /dev/null
@@ -0,0 +1,23 @@
+##############################################################################
+# Copyright (c) 2019 AT&T, ENEA AB, Nokia and others                         #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License");            #
+# you maynot use this file except in compliance with the License.            #
+#                                                                            #
+# You may obtain a copy of the License at                                    #
+#       http://www.apache.org/licenses/LICENSE-2.0                           #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  #
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.           #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+##############################################################################
+
+.PHONY: all
+all: .push_image .push_manifest
+
+.PHONY: build
+build: .build
+
+include ../build.mk
diff --git a/docker/k8s/pip-requirements.txt b/docker/k8s/pip-requirements.txt
new file mode 100644 (file)
index 0000000..6139a45
--- /dev/null
@@ -0,0 +1,4 @@
+robotframework
+robotframework-httplibrary
+robotframework-requests
+robotframework-sshlibrary
diff --git a/helloworld/helloworld.robot b/helloworld/helloworld.robot
new file mode 100644 (file)
index 0000000..aa85d18
--- /dev/null
@@ -0,0 +1,22 @@
+##############################################################################
+# Copyright (c) 2019 AT&T Intellectual Property.                             #
+# Copyright (c) 2019 Nokia.                                                  #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License.                   #
+#                                                                            #
+# You may obtain a copy of the License at                                    #
+#       http://www.apache.org/licenses/LICENSE-2.0                           #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  #
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.           #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+##############################################################################
+*** Test Cases ***
+Test With Settings
+    [Documentation]    Another dummy test
+    [Tags]    dummy    owner-johndoe
+    Log    Hello, world!
+