Skip to content

Commit 7281b13

Browse files
authored
test for no generic item (#260)
* test for no generic item * add test case for malformed AW * move to helm3 * change dir to helm chart * run all tests * add podgroup CRD * add podgroup rbac * fix helm command * make aw name unique * add correct aw name * remove duplicate test * address review * fix yaml format * fix key format
1 parent 36010aa commit 7281b13

File tree

3 files changed

+288
-22
lines changed

3 files changed

+288
-22
lines changed

hack/run-e2e-kind.sh

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -278,37 +278,25 @@ function kube-test-env-up {
278278
cat $HOME/.kube/config
279279
fi
280280

281-
# Install Helm Client
281+
# Installing helm3
282282

283-
echo "---"
284-
echo "Installing Helm Client..."
285-
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh
286-
chmod u+x install-helm.sh
287-
./install-helm.sh --version v2.17.0
288-
289-
# Start Helm Server
290-
echo "Installing Helm Server..."
291-
kubectl -n kube-system create serviceaccount tiller
292-
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
293-
294-
echo "Initialize Helm Server..."
295-
helm init --service-account tiller
296-
echo "Wait for Helm Server to complete startup..."
297-
sleep 25
283+
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
284+
chmod 700 get_helm.sh
285+
./get_helm.sh
286+
sleep 10
298287

299-
echo "Getting Helm Server info..."
300-
tiller_pod=$(kubectl get pods --namespace kube-system | grep tiller | awk '{print $1}')
288+
helm version
301289

302-
kubectl describe pod ${tiller_pod} -n kube-system
290+
echo "Installing Podgroup CRD"
303291

304-
helm version
292+
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/scheduler-plugins/277b6bdec18f8a9e9ccd1bfeaf4b66495bfc6f92/config/crd/bases/scheduling.sigs.k8s.io_podgroups.yaml
305293

306-
cd deployment
294+
cd deployment/mcad-controller
307295

308296
# start mcad controller
309297
echo "Starting MCAD Controller..."
310298
echo "helm install mcad-controller namespace kube-system wait set loglevel=2 set resources.requests.cpu=1000m set resources.requests.memory=1024Mi set resources.limits.cpu=4000m set resources.limits.memory=4096Mi set image.repository=$IMAGE_REPOSITORY_MCAD set image.tag=$IMAGE_TAG_MCAD set image.pullPolicy=$MCAD_IMAGE_PULL_POLICY"
311-
helm install mcad-controller --namespace kube-system --wait --set loglevel=2 --set resources.requests.cpu=1000m --set resources.requests.memory=1024Mi --set resources.limits.cpu=4000m --set resources.limits.memory=4096Mi --set image.repository=$IMAGE_REPOSITORY_MCAD --set image.tag=$IMAGE_TAG_MCAD --set image.pullPolicy=$MCAD_IMAGE_PULL_POLICY
299+
helm upgrade --install mcad-controller . --namespace kube-system --wait --set loglevel=2 --set resources.requests.cpu=1000m --set resources.requests.memory=1024Mi --set resources.limits.cpu=4000m --set resources.limits.memory=4096Mi --set configMap.name=mcad-controller-configmap --set configMap.podCreationTimeout='"120000"' --set configMap.quotaEnabled='"false"' --set coscheduler.rbac.apiGroup=scheduling.sigs.k8s.io --set coscheduler.rbac.resource=podgroups --set image.repository=$IMAGE_REPOSITORY_MCAD --set image.tag=$IMAGE_TAG_MCAD --set image.pullPolicy=$MCAD_IMAGE_PULL_POLICY
312300

313301
sleep 10
314302
echo "Listing MCAD Controller Helm Chart and Pod YAML..."

test/e2e/queue.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,21 @@ var _ = Describe("AppWrapper E2E Test", func() {
350350

351351
})
352352

353+
It("Create AppWrapper - Bad Generic Item Only", func() {
354+
fmt.Fprintf(os.Stdout, "[e2e] Create AppWrapper - Bad Generic Item Only - Started.\n")
355+
context := initTestContext()
356+
var appwrappers []*arbv1.AppWrapper
357+
appwrappersPtr := &appwrappers
358+
defer cleanupTestObjectsPtr(context, appwrappersPtr)
359+
360+
aw := createBadGenericItemAW(context, "aw-bad-generic-item-1")
361+
appwrappers = append(appwrappers, aw)
362+
363+
err := waitAWPodsReady(context, aw)
364+
Expect(err).To(HaveOccurred())
365+
366+
})
367+
353368
It("Create AppWrapper - Namespace Only - 0 Pods", func() {
354369
fmt.Fprintf(os.Stdout, "[e2e] Create AppWrapper - Namespace Only - 0 Pods - Started.\n")
355370
context := initTestContext()
@@ -549,6 +564,47 @@ var _ = Describe("AppWrapper E2E Test", func() {
549564

550565
})
551566

567+
It("MCAD Multi-Item Job Completion Test", func() {
568+
fmt.Fprintf(os.Stdout, "[e2e] MCAD Multi-Item Job Completion Test - Started.\n")
569+
context := initTestContext()
570+
var appwrappers []*arbv1.AppWrapper
571+
appwrappersPtr := &appwrappers
572+
defer cleanupTestObjectsPtr(context, appwrappersPtr)
573+
574+
aw := createGenericJobAWWithMultipleStatus(context, "aw-test-job-with-comp-ms-21")
575+
err1 := waitAWPodsReady(context, aw)
576+
Expect(err1).NotTo(HaveOccurred())
577+
time.Sleep(1 * time.Minute)
578+
aw1, err := context.karclient.ArbV1().AppWrappers(aw.Namespace).Get(aw.Name, metav1.GetOptions{})
579+
if err != nil {
580+
fmt.Fprintf(os.Stdout, "Error getting status")
581+
}
582+
pass := false
583+
fmt.Fprintf(os.Stdout, "[e2e] status of AW %v.\n", aw1.Status.State)
584+
if aw1.Status.State == arbv1.AppWrapperStateCompleted {
585+
pass = true
586+
}
587+
Expect(pass).To(BeTrue())
588+
appwrappers = append(appwrappers, aw)
589+
fmt.Fprintf(os.Stdout, "[e2e] MCAD Job Completion Test - Completed.\n")
590+
591+
})
592+
593+
It("MCAD GenericItem Without Status Test", func() {
594+
fmt.Fprintf(os.Stdout, "[e2e] MCAD GenericItem Without Status Test - Started.\n")
595+
context := initTestContext()
596+
var appwrappers []*arbv1.AppWrapper
597+
appwrappersPtr := &appwrappers
598+
defer cleanupTestObjectsPtr(context, appwrappersPtr)
599+
600+
aw := createAWGenericItemWithoutStatus(context, "aw-test-job-with-comp-44")
601+
err1 := waitAWPodsReady(context, aw)
602+
fmt.Fprintf(os.Stdout, "The error is: %v", err1)
603+
Expect(err1).To(HaveOccurred())
604+
fmt.Fprintf(os.Stdout, "[e2e] MCAD GenericItem Without Status Test - Completed.\n")
605+
606+
})
607+
552608
It("MCAD Job Completion No-requeue Test", func() {
553609
fmt.Fprintf(os.Stdout, "[e2e] MCAD Job Completion No-requeue Test - Started.\n")
554610
context := initTestContext()

test/e2e/util.go

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1806,6 +1806,192 @@ func createGenericJobAWWithStatus(context *context, name string) *arbv1.AppWrapp
18061806
return appwrapper
18071807
}
18081808

1809+
func createGenericJobAWWithMultipleStatus(context *context, name string) *arbv1.AppWrapper {
1810+
rb := []byte(`{
1811+
"apiVersion": "batch/v1",
1812+
"kind": "Job",
1813+
"metadata": {
1814+
"name": "aw-test-job-with-comp-ms-21-1",
1815+
"namespace": "test"
1816+
},
1817+
"spec": {
1818+
"completions": 1,
1819+
"parallelism": 1,
1820+
"template": {
1821+
"metadata": {
1822+
"labels": {
1823+
"appwrapper.mcad.ibm.com": "aw-test-job-with-comp-ms-21"
1824+
}
1825+
},
1826+
"spec": {
1827+
"containers": [
1828+
{
1829+
"args": [
1830+
"sleep 5"
1831+
],
1832+
"command": [
1833+
"/bin/bash",
1834+
"-c",
1835+
"--"
1836+
],
1837+
"image": "ubuntu:latest",
1838+
"imagePullPolicy": "IfNotPresent",
1839+
"name": "aw-test-job-with-comp-ms-21-1",
1840+
"resources": {
1841+
"limits": {
1842+
"cpu": "100m",
1843+
"memory": "256M"
1844+
},
1845+
"requests": {
1846+
"cpu": "100m",
1847+
"memory": "256M"
1848+
}
1849+
}
1850+
}
1851+
],
1852+
"restartPolicy": "Never"
1853+
}
1854+
}
1855+
}
1856+
}`)
1857+
1858+
rb2 := []byte(`{
1859+
"apiVersion": "batch/v1",
1860+
"kind": "Job",
1861+
"metadata": {
1862+
"name": "aw-test-job-with-comp-ms-21-2",
1863+
"namespace": "test"
1864+
},
1865+
"spec": {
1866+
"completions": 1,
1867+
"parallelism": 1,
1868+
"template": {
1869+
"metadata": {
1870+
"labels": {
1871+
"appwrapper.mcad.ibm.com": "aw-test-job-with-comp-ms-21"
1872+
}
1873+
},
1874+
"spec": {
1875+
"containers": [
1876+
{
1877+
"args": [
1878+
"sleep 5"
1879+
],
1880+
"command": [
1881+
"/bin/bash",
1882+
"-c",
1883+
"--"
1884+
],
1885+
"image": "ubuntu:latest",
1886+
"imagePullPolicy": "IfNotPresent",
1887+
"name": "aw-test-job-with-comp-ms-21-2",
1888+
"resources": {
1889+
"limits": {
1890+
"cpu": "100m",
1891+
"memory": "256M"
1892+
},
1893+
"requests": {
1894+
"cpu": "100m",
1895+
"memory": "256M"
1896+
}
1897+
}
1898+
}
1899+
],
1900+
"restartPolicy": "Never"
1901+
}
1902+
}
1903+
}
1904+
}`)
1905+
1906+
aw := &arbv1.AppWrapper{
1907+
ObjectMeta: metav1.ObjectMeta{
1908+
Name: name,
1909+
Namespace: "test",
1910+
},
1911+
Spec: arbv1.AppWrapperSpec{
1912+
AggrResources: arbv1.AppWrapperResourceList{
1913+
GenericItems: []arbv1.AppWrapperGenericResource{
1914+
{
1915+
ObjectMeta: metav1.ObjectMeta{
1916+
Name: fmt.Sprintf("%s-%s", name, "aw-test-job-with-comp-ms-21-1"),
1917+
Namespace: "test",
1918+
},
1919+
DesiredAvailable: 1,
1920+
GenericTemplate: runtime.RawExtension{
1921+
Raw: rb,
1922+
},
1923+
CompletionStatus: "Complete",
1924+
},
1925+
{
1926+
ObjectMeta: metav1.ObjectMeta{
1927+
Name: fmt.Sprintf("%s-%s", name, "aw-test-job-with-comp-ms-21-2"),
1928+
Namespace: "test",
1929+
},
1930+
DesiredAvailable: 1,
1931+
GenericTemplate: runtime.RawExtension{
1932+
Raw: rb2,
1933+
},
1934+
CompletionStatus: "Complete",
1935+
},
1936+
},
1937+
},
1938+
},
1939+
}
1940+
1941+
appwrapper, err := context.karclient.ArbV1().AppWrappers(context.namespace).Create(aw)
1942+
Expect(err).NotTo(HaveOccurred())
1943+
1944+
return appwrapper
1945+
}
1946+
1947+
func createAWGenericItemWithoutStatus(context *context, name string) *arbv1.AppWrapper {
1948+
rb := []byte(`{
1949+
"apiVersion": "scheduling.sigs.k8s.io/v1alpha1",
1950+
"kind": "PodGroup",
1951+
"metadata": {
1952+
"name": "aw-schd-spec-with-timeout-1",
1953+
"namespace": "default",
1954+
"labels":{
1955+
"appwrapper.mcad.ibm.com": "aw-test-job-with-comp-44"
1956+
}
1957+
},
1958+
"spec": {
1959+
"minMember": 1
1960+
}
1961+
}`)
1962+
var schedSpecMin int = 1
1963+
aw := &arbv1.AppWrapper{
1964+
ObjectMeta: metav1.ObjectMeta{
1965+
Name: name,
1966+
Namespace: "test",
1967+
},
1968+
Spec: arbv1.AppWrapperSpec{
1969+
SchedSpec: arbv1.SchedulingSpecTemplate{
1970+
MinAvailable: schedSpecMin,
1971+
},
1972+
AggrResources: arbv1.AppWrapperResourceList{
1973+
GenericItems: []arbv1.AppWrapperGenericResource{
1974+
{
1975+
ObjectMeta: metav1.ObjectMeta{
1976+
Name: fmt.Sprintf("%s-%s", name, "aw-test-job-with-comp-44"),
1977+
Namespace: "test",
1978+
},
1979+
DesiredAvailable: 1,
1980+
GenericTemplate: runtime.RawExtension{
1981+
Raw: rb,
1982+
},
1983+
},
1984+
},
1985+
},
1986+
},
1987+
}
1988+
1989+
appwrapper, err := context.karclient.ArbV1().AppWrappers(context.namespace).Create(aw)
1990+
Expect(err).NotTo(HaveOccurred())
1991+
1992+
return appwrapper
1993+
}
1994+
18091995
func createGenericJobAWWithScheduleSpec(context *context, name string) *arbv1.AppWrapper {
18101996
rb := []byte(`{
18111997
"apiVersion": "batch/v1",
@@ -3185,6 +3371,42 @@ func createBadGenericPodAW(context *context, name string) *arbv1.AppWrapper {
31853371

31863372
return appwrapper
31873373
}
3374+
3375+
func createBadGenericItemAW(context *context, name string) *arbv1.AppWrapper {
3376+
//rb := []byte(`""`)
3377+
var schedSpecMin int = 1
3378+
3379+
aw := &arbv1.AppWrapper{
3380+
ObjectMeta: metav1.ObjectMeta{
3381+
Name: name,
3382+
Namespace: context.namespace,
3383+
},
3384+
Spec: arbv1.AppWrapperSpec{
3385+
SchedSpec: arbv1.SchedulingSpecTemplate{
3386+
MinAvailable: schedSpecMin,
3387+
},
3388+
AggrResources: arbv1.AppWrapperResourceList{
3389+
GenericItems: []arbv1.AppWrapperGenericResource{
3390+
{
3391+
ObjectMeta: metav1.ObjectMeta{
3392+
Name: fmt.Sprintf("%s-%s", name, "item"),
3393+
Namespace: context.namespace,
3394+
},
3395+
// GenericTemplate: runtime.RawExtension{
3396+
// Raw: rb,
3397+
// },
3398+
},
3399+
},
3400+
},
3401+
},
3402+
}
3403+
3404+
appwrapper, err := context.karclient.ArbV1().AppWrappers(context.namespace).Create(aw)
3405+
Expect(err).NotTo(HaveOccurred())
3406+
3407+
return appwrapper
3408+
}
3409+
31883410
func createBadGenericPodTemplateAW(context *context, name string) (*arbv1.AppWrapper, error) {
31893411
rb := []byte(`{"metadata":
31903412
{

0 commit comments

Comments
 (0)