VOL-1054 Kubernetes Conversion and PonsimV2date Makefile with selective changes from the one from SIAB to allow compatibility with Helm Chart changes
Change Class and filenames according to best practices
Change preprovisionTest -> Preprovision
Change-Id: Ib15e34ad397d2307b5ba3890cc6e8b245e5e3004
diff --git a/tests/atests/build/Makefile b/tests/atests/build/Makefile
new file mode 100644
index 0000000..75cf937
--- /dev/null
+++ b/tests/atests/build/Makefile
@@ -0,0 +1,180 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# 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.
+
+SHELL           := /bin/bash
+BUILD           ?= /tmp
+M               ?= $(BUILD)/milestones
+MYDIR           := $(dir $(realpath $(firstword $(MAKEFILE_LIST))))
+    
+HELM_VERSION    ?= "2.10.0"
+HELM_SHA256SUM  ?= "0fa2ed4983b1e4a3f90f776d08b88b0c73fd83f305b5b634175cb15e61342ffe"
+HELM_PLATFORM   ?= "linux-amd64"
+
+KAFKA_CHART_VERSION  ?= 0.8.8
+
+/all: $(M)/voltha_ponsim_running
+
+$(M)/setup: 
+	echo "MYDIR = ${MYDIR}"
+	mkdir -p $(M)
+	sudo apt update
+	sudo apt install -y httpie jq software-properties-common
+	sudo swapoff -a
+	touch $@
+
+/usr/bin/docker: | $(M)/setup
+	sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 0EBFCD88
+	sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(shell lsb_release -cs) stable"
+	sudo apt update
+	sudo apt install -y "docker-ce=17.06*"
+
+/usr/bin/kubeadm: | $(M)/setup /usr/bin/docker
+	curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
+	echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /tmp/kubernetes.list
+	sudo cp /tmp/kubernetes.list /etc/apt/sources.list.d/kubernetes.list
+	sudo apt update
+	sudo apt install -y "kubeadm=1.11.3-*" "kubelet=1.11.3-*" "kubectl=1.11.3-*"
+
+/usr/local/bin/helm:
+	curl -L -o /tmp/helm.tgz "https://storage.googleapis.com/kubernetes-helm/helm-v${HELM_VERSION}-${HELM_PLATFORM}.tar.gz"
+	echo "${HELM_SHA256SUM}  /tmp/helm.tgz" | sha256sum -c -
+	cd /tmp; tar -xzvf helm.tgz; sudo mv ${HELM_PLATFORM}/helm /usr/local/bin/helm
+	sudo chmod a+x /usr/local/bin/helm
+	rm -rf /tmp/helm.tgz /tmp/${HELM_PLATFORM}
+
+$(M)/kubeadm: | $(M)/setup /usr/bin/kubeadm
+	sudo kubeadm init --pod-network-cidr=192.168.0.0/16
+	mkdir -p $(HOME)/.kube
+	sudo cp -f /etc/kubernetes/admin.conf $(HOME)/.kube/config
+	sudo chown $(id -u):$(id -g) $(HOME)/.kube/config
+	kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
+	kubectl taint nodes --all node-role.kubernetes.io/master-
+	touch $@
+
+$(M)/helm-init: | $(M)/kubeadm /usr/local/bin/helm
+	kubectl create serviceaccount --namespace kube-system tiller
+	kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
+	helm init --service-account tiller
+	until helm ls >& /dev/null; \
+	do \
+		echo "Waiting for Helm to be ready"; \
+		sleep 5; \
+	done
+	helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
+	touch $@
+
+$(HOME)/cord/helm-charts: | $(M)/setup
+	mkdir -p $(HOME)/cord
+	cd $(HOME)/cord; git clone https://gerrit.opencord.org/helm-charts
+
+$(M)/kafka: | $(HOME)/cord/helm-charts $(M)/helm-init
+	cd $(HOME)/cord/helm-charts && \
+	helm upgrade --install cord-kafka --version $(KAFKA_CHART_VERSION) -f examples/kafka-single.yaml incubator/kafka
+	touch $@
+
+$(M)/kafka-running: | $(M)/kafka
+	kubectl wait pod/cord-kafka-0 --for condition=Ready --timeout=180s
+	touch $@
+
+$(M)/onos: | $(M)/kafka-running
+	cd $(HOME)/cord/helm-charts; helm upgrade --install onos onos -f configs/onos.yaml -f configs/seba-ponsim.yaml --set onosImage=voltha/voltha-onos:latest
+	touch $@
+
+$(M)/voltha: | $(M)/kafka-running $(M)/onos
+	cd $(HOME)/cord/helm-charts; helm dep up voltha
+	cd $(HOME)/cord/helm-charts; helm upgrade --install voltha -f configs/seba-ponsim.yaml \
+    	--set etcd-operator.customResources.createEtcdClusterCRD=false \
+    	voltha
+	touch $@
+
+$(M)/etcd-operator-ready: | $(M)/voltha
+	until kubectl api-versions | grep etcd.database.coreos.com/v1beta2; \
+	do \
+		echo "Waiting for etcd.database.coreos.com/v1beta2 to be available"; \
+		sleep 5; \
+	done
+	until kubectl api-resources | grep EtcdCluster; \
+	do \
+		echo "Waiting for EtcdCluster API resource to be available"; \
+		sleep 5; \
+	done
+	touch $@
+
+$(M)/etcd-cluster: | $(M)/etcd-operator-ready
+	cd $(HOME)/cord/helm-charts; helm upgrade voltha -f configs/seba-ponsim.yaml \
+    	--set etcd-operator.customResources.createEtcdClusterCRD=true \
+    	voltha
+	touch $@
+
+$(M)/voltha-running: | $(M)/etcd-cluster
+	$(HOME)/cord/helm-charts/scripts/wait_for_pods.sh voltha
+	touch $@
+
+$(M)/ponsim: | $(M)/voltha-running
+	cd $(HOME)/cord/helm-charts; helm upgrade --install ponnet ponnet
+	$(HOME)/cord/helm-charts/scripts/wait_for_pods.sh kube-system
+	cd $(HOME)/cord/helm-charts; helm upgrade --install ponsimv2 ponsimv2 -f configs/seba-ponsim.yaml
+	touch $@
+
+$(M)/pon0_fwd: | $(M)/ponsim
+	echo 8 > /tmp/pon0_group_fwd_mask
+	until sudo cp /tmp/pon0_group_fwd_mask /sys/class/net/pon0/bridge/group_fwd_mask; \
+	do \
+		echo "waiting for pon0..."; \
+		sleep 5; \
+	done
+	rm /tmp/pon0_group_fwd_mask
+	touch $@
+
+$(M)/voltha_ponsim_running: | $(M)/pon0_fwd
+	$(HOME)/cord/helm-charts/scripts/wait_for_pods.sh
+	touch $@
+	echo "Voltha Test Framework Ready!"
+
+$(M)/authenticate: $(M)/voltha_ponsim_running
+	timeout 60s bash -c "until http -a admin@opencord.org:letmein GET http://127.0.0.1:30001/xosapi/v1/att-workflow-driver/attworkflowdriverserviceinstances |jq '.items[0].authentication_state'|grep AWAITING; do echo 'waiting for att-workflow-driver to be in AWAITING state'; sleep 5; done"
+	kubectl -n voltha exec $(shell kubectl -n voltha get pod|grep "^rg-"|cut -d' ' -f1) -- wpa_supplicant -i eth0 -Dwired -c /etc/wpa_supplicant/wpa_supplicant.conf -B
+	timeout 60s bash -c "until http -a admin@opencord.org:letmein GET http://127.0.0.1:30001/xosapi/v1/att-workflow-driver/attworkflowdriverserviceinstances |jq '.items[0].authentication_state'|grep APPROVED; do echo 'waiting for att-workflow-driver to be in APPROVED state'; sleep 5; done"
+	touch $@
+	
+$(M)/dhclient: $(M)/authenticate
+	sudo iptables -P FORWARD ACCEPT
+	timeout 60s bash -c "until http -a admin@opencord.org:letmein GET http://127.0.0.1:30001/xosapi/v1/fabric-crossconnect/fabriccrossconnectserviceinstances |jq '.items[0].backend_status'|grep OK; do echo 'waiting for fabric-crossconnect to be synchronized';sleep 5; done"
+	kubectl -n voltha exec $(shell kubectl -n voltha get pod|grep "^rg-"|cut -d' ' -f1) -- dhclient
+	kubectl -n voltha exec $(shell kubectl -n voltha get pod|grep "^rg-"|cut -d' ' -f1) -- dhclient -r
+	kubectl -n voltha exec $(shell kubectl -n voltha get pod|grep "^rg-"|cut -d' ' -f1) -- dhclient
+	touch $@
+
+$(M)/pingtest: $(M)/dhclient
+	kubectl -n voltha exec $(shell kubectl -n voltha get pod|grep "^rg-"|cut -d' ' -f1) -- ping -c 3 172.18.0.10
+	touch $@
+
+run-tests: $(M)/pingtest
+
+remove-chart-milestones:
+	cd $(M); sudo rm -f setup kafka kafka-running onos voltha etcd-operator-ready etcd-cluster \
+		pon0_fwd voltha-running ponsim voltha_ponsim_running
+remove-kube-milestones:
+	cd $(M); sudo rm -f kubeadm helm-init
+
+remove-test-milestones:
+	cd $(M); sudo rm -f authenticate dhclient pingtest
+
+teardown-charts: remove-chart-milestones
+	helm delete --purge $(shell helm ls -q)
+
+reset-kubeadm: remove-chart-milestones remove-kube-milestones
+	sudo kubeadm reset -f
+	sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X
+