Blame SOURCES/0013-test-Update-openshift-tests-to-master.patch

ce15b8
From a3ddc1c7865b128b6a2bf3aa22876b238b0fb445 Mon Sep 17 00:00:00 2001
2587cc
From: Dominik Perpeet <dperpeet@redhat.com>
2587cc
Date: Tue, 20 Jun 2017 22:35:41 +0200
ce15b8
Subject: [PATCH 13/23] test: Update openshift tests to master
2587cc
2587cc
Closes #7025
2587cc
Reviewed-by: Stef Walter <stefw@redhat.com>
2587cc
---
2587cc
 test/verify/check-openshift | 181 +++++++++++++++++++++++++++++++++++++++++---
2587cc
 test/verify/kubelib.py      |   9 ++-
2587cc
 2 files changed, 178 insertions(+), 12 deletions(-)
2587cc
2587cc
diff --git a/test/verify/check-openshift b/test/verify/check-openshift
ce15b8
index 5c404e5..6b2236d 100755
2587cc
--- a/test/verify/check-openshift
2587cc
+++ b/test/verify/check-openshift
2587cc
@@ -51,7 +51,7 @@ def wait_project(machine, project):
2587cc
             i = i + 1
2587cc
             time.sleep(2)
2587cc
 
2587cc
-@skipImage("Kubernetes not packaged", "debian-8", "debian-testing", "ubuntu-1604", "fedora-i386")
2587cc
+@skipImage("Kubernetes not packaged", "debian-stable", "debian-testing", "ubuntu-1604", "ubuntu-stable", "fedora-i386")
2587cc
 @skipImage("No cockpit-kubernetes packaged", "continuous-atomic", "fedora-atomic", "rhel-atomic")
2587cc
 class TestOpenshift(MachineCase, OpenshiftCommonTests):
2587cc
     additional_machines = {
2587cc
@@ -63,12 +63,13 @@ class TestOpenshift(MachineCase, OpenshiftCommonTests):
2587cc
 
2587cc
         self.openshift = self.machines['openshift']
2587cc
         self.openshift.upload(["verify/files/mock-app-openshift.json"], "/tmp")
2587cc
-        tmpfile = os.path.join(self.tmpdir, "config")
2587cc
-        self.openshift.download("/root/.kube/config", tmpfile)
2587cc
+        self.kubeconfig = os.path.join(self.tmpdir, "config")
2587cc
+        self.openshift.download("/root/.kube/config", self.kubeconfig)
2587cc
 
2587cc
         m = self.machine
2587cc
-        with open(tmpfile, "r") as f:
2587cc
-            m.execute("mkdir -p /home/admin/.kube && cat > /home/admin/.kube/config", input=f.read())
2587cc
+        m.execute("mkdir -p /home/admin/.kube")
2587cc
+        m.upload([self.kubeconfig], "/home/admin/.kube/config")
2587cc
+        m.execute("chown -R admin:admin /home/admin/.kube")
2587cc
 
2587cc
         wait_project(self.openshift, "marmalade")
2587cc
 
2587cc
@@ -124,7 +125,7 @@ class TestOpenshift(MachineCase, OpenshiftCommonTests):
2587cc
         b.wait_present("a[href='#/volumes']")
2587cc
         b.click("a[href='#/volumes']")
2587cc
         b.wait_present(".pv-listing")
2587cc
-        b.wait_in_text(".pv-listing", "cannot list all")
2587cc
+        b.wait_in_text(".pv-listing", "cannot watch all")
2587cc
         b.click("a[href='#/']")
2587cc
 
2587cc
         b.wait_present("#kubernetes-change-connection")
2587cc
@@ -145,7 +146,7 @@ class TestOpenshift(MachineCase, OpenshiftCommonTests):
2587cc
 
2587cc
         # Test the saved kube config file
2587cc
         m.execute("rm /home/admin/.kube/config")
2587cc
-        m.upload(["verify/files/openshift.kubeconfig"], "/home/admin/.kube/config")
2587cc
+        m.upload([self.kubeconfig], "/home/admin/.kube/config")
2587cc
         m.execute("chown -R admin:admin /home/admin/.kube")
2587cc
 
2587cc
         self.login_and_go("/kubernetes")
2587cc
@@ -304,7 +305,81 @@ LABEL io.projectatomic.nulecule.atomicappversion="0.1.11" \
2587cc
         b.wait_present(".details-listing tbody[data-id='pods/default/helloapache'] th")
2587cc
         self.assertEqual(b.text(".details-listing tbody[data-id='pods/default/helloapache'] th"), "helloapache")
2587cc
 
2587cc
-@skipImage("Kubernetes not packaged", "debian-8", "debian-testing", "ubuntu-1604", "fedora-i386")
2587cc
+    def testReconnectChangeCert(self):
2587cc
+        m = self.machine
2587cc
+        b = self.browser
2587cc
+
2587cc
+        # Try to connect with an old and non-matching client cert
2587cc
+        old_cert = ('LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUREVENDQWZXZ0F3SUJBZ0lCQnpBTkJna3Foa2'
2587cc
+                    'lHOXcwQkFRc0ZBREFtTVNRd0lnWURWUVFEREJ0dmNHVnUKYzJocFpuUXRjMmxuYm1WeVFERTBPVEEy'
2587cc
+                    'T0RFMk16RXdIaGNOTVRjd016STRNRFl4TXpVeVdoY05NVGt3TXpJNApNRFl4TXpVeldqQTNNUjR3SE'
2587cc
+                    'FZRFZRUUtFeFZ6ZVhOMFpXMDZZMngxYzNSbGNpMWhaRzFwYm5NeEZUQVRCZ05WCkJBTVRESE41YzNS'
2587cc
+                    'bGJUcGhaRzFwYmpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUIKQU5Rel'
2587cc
+                    'J5SzUzQUhmdlZnME5GTHRSSENhMTEyK3l5a0xXdG14bjAxb2JTMy85VmovQU1UdmZwNVRkUlhKNjF'
2587cc
+                    'WcAo3L0N1L1pkQ3RDc1pyNnJpYVMxbUJGcmtTSkZJdmFjN2NNa3k2M0tVVXNaQmU5ZGFLdG1OMmhY'
2587cc
+                    'TUt0VitESStvCjJFQVJNWlV5YTZIMzJXZUpzRGM0L1lscUR5TFAxYVR3NWNwRTJPY3dWQTdoQ1dCS'
2587cc
+                    'ysyajIvZTl6RDhrYzM2R24KNG0wZWd3YWxlZ2UwTXFaUk1BbTFkenRpS3I1UWZ4MG9ZVUY3Z0JIYm'
2587cc
+                    'RjM253cGZ6a3M2K1F4Tkl6V0hlRmN2WApxcXpsMGxnT2ZGeWc0VWptYzhFcTBiKy9ER3lYSGlHNXN'
2587cc
+                    'vVmw1RGlVa1RKRjNrcURCZVVjZWNZaEx1VDd4emxzClk0bldYVFprc3lJMXVoZFJmS2NnbVZjQ0F3'
2587cc
+                    'RUFBYU0xTURNd0RnWURWUjBQQVFIL0JBUURBZ1dnTUJNR0ExVWQKSlFRTU1Bb0dDQ3NHQVFVRkJ3T'
2587cc
+                    'UNNQXdHQTFVZEV3RUIvd1FDTUFBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQgpBRy9rTElnQ2YwK2'
2587cc
+                    '1MZ1VXcWZjS2NLN0Nmdm9PbS9qL0FUSW1MR0YvSUtvQTRCWGhqMG5EcEszeVd3ZGt4d0hZCmxxUDh'
2587cc
+                    'xZ1NyQ1FaNkVoSlpMSWtjQWovTUlTUEUvSlJPa3R5TWFTMis4OGhqeGpxdUhucnZ5ODA5ZlJ5QzhF'
2587cc
+                    'R2kKeVIyRzhtNGJ5MEJrOWhENkVxbDYxb21VU0MzL2ozR3lPUGNZWDJEQjZsU2h4ZlFJVEpqUWNKQ'
2587cc
+                    '0oyMnNDdlBBOApVeU9EaUgrNllZSVdtVFN5a2kzazk0Q3NOZXlRbERjNzh3a1BseUdrN0p1anFIK2p'
2587cc
+                    'KaURXSDQ2TXE3TTNaVVArCmowQWxhd3dtdllsRjBVZEIwdGRCenZWR21RbTRudEwwSkhVMGFqRnUy'
2587cc
+                    'QTYvTjJmT3VrZWI0TDR6elBzSkJFNHIKaUUyNWRJUlAvWHRoM0tjRFYyYkxtMUk9Ci0tLS0tRU5EI'
2587cc
+                    'ENFUlRJRklDQVRFLS0tLS0K')
2587cc
+        old_key = ('LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBMUROSElybmNBZC'
2587cc
+                   's5V0RRMFV1MUVjSnJYWGI3TEtRdGEyYkdmVFdodExmLzFXUDhBCnhPOStubE4xRmNuclZXbnY4Szc5'
2587cc
+                   'bDBLMEt4bXZxdUpwTFdZRVd1UklrVWk5cHp0d3lUTHJjcFJTeGtGNzExb3EKMlkzYUZjd3ExWDRNa'
2587cc
+                   'jZqWVFCRXhsVEpyb2ZmWlo0bXdOemo5aVdvUElzL1ZwUERseWtUWTV6QlVEdUVKWUVyNwphUGI5Nz'
2587cc
+                   'NNUHlSemZvYWZpYlI2REJxVjZCN1F5cGxFd0NiVjNPMklxdmxCL0hTaGhRWHVBRWR0MXplZkNsL09'
2587cc
+                   'TCnpyNURFMGpOWWQ0Vnk5ZXFyT1hTV0E1OFhLRGhTT1p6d1NyUnY3OE1iSmNlSWJteWhXWGtPSlNS'
2587cc
+                   'TWtYZVNvTUYKNVJ4NXhpRXU1UHZIT1d4amlkWmRObVN6SWpXNkYxRjhweUNaVndJREFRQUJBb0lCQ'
2587cc
+                   'UNxbjNDYlk0YWJteVBNUQpHMnlJRVhmcFNGMnAyc0QzYlYzUlhNcDhzV1hMekJBRndxdlQwTW9XME'
2587cc
+                   'xSK2tIWHRBN1NJR0tYdFhMWkZSWkMrClRwSTNyYXh2c3o2eE5wNkZUbGpEaVp6UXdBcm1ZdlNaUlg'
2587cc
+                   'vU0NnTFR0ZENRdEFtMDBUT2Z3UzNTb3R3K0xFK3AKMStoaDVtVlhFby9XNDRWeWYxNjNsRHAwOXBD'
2587cc
+                   'K3dpS0ZEa2JHVExBdnA1bnFaMnhtZDRyNzhyMi9TZmZ2YUplZQpJSlpwbENMYzMyQkVZaE4yeDRIa'
2587cc
+                   'HpqQkhOdTJwYkFXS2twUDVjWkZNS3QwSUkrRTN0UUNWMlkrYVZvNTY0TzRGCjZxMmFUUzVxMnRuaW'
2587cc
+                   'VBTS9uay8zN3hkNUVoNjRpMU8vQTU2YzdoZmxkMDVQMC9PdU9OY2dsaVVYRG44cnFvOUoKdXpFQ1F'
2587cc
+                   'ORUNnWUVBN0xOeWRQQlhkdEZRZ3NrWG56UlVYM3hhYWFCYU8xYnJYZzVmUnlMVm5DY2thWlRORXlE'
2587cc
+                   'dAp3eURxSGRUOGtRNXNIcXZ3WDNxNXR1elZBZ3NJUlhvcTZIUGtxRWdLeFZIclhTNzY1OFhLUnR1S'
2587cc
+                   'GswbE11ZkQxCnVPVVBaTTJYNVR4NXRmTmh1Zlh3dXZqTkdyN0E3ZEw4VUFiY3ZtS2VuSnF2bDNJZX'
2587cc
+                   'I0cVpkdDBDZ1lFQTVZQncKZ2pNTGJRZStEUzd1QmdsOFVmdGl5YnZCbDdTSEQ4T2RWamVOdzNEZjJ'
2587cc
+                   'uckltQVdLTVhNTk5GWldwbmhhc0g3Swp1bWtMQWdMNWFEWXJhaFJHN2ZwMGd0YnN0RVE5Uit2dFVp'
2587cc
+                   'azMxaFNHUS83dFBENU1LaU1jcFpnazhYUXI5UnlFCkVEN285bWFvUEZibnJKbFl5VXNQY0FCN3Y1W'
2587cc
+                   'FNxaVdqeFZMODI4TUNnWUVBNUhoSk1DcVVvZkZqL3ZsUFBiSnIKQmtlbmxYRGI1NDc4WEtzT3VFRW'
2587cc
+                   'RZajQ5M1ZOdHB0c1A1RnF1MytDbmNQUTAxRjR1QkZzWFMwUEtUdENMU1ZTawplZjd6WktNMUVrVUN'
2587cc
+                   'JODJuRFhSU3pKWTFoS3NwemdpUmhjaERWWTlFNEZYQlBTa1EyVWhVOW9RVXBZNGQ5dkRCCjdoVFJt'
2587cc
+                   'VXJqd2xGa3o0K3RvczdyVmxrQ2dZRUF4RW8vY0V5aVNDV29HblI2Sm5XMGZCWUxuMGxVUWlHb3B3W'
2587cc
+                   'UQKS3Z1bTUzTkNNd1p6VFByb0FIVkw1T2kzZ2ZoTWNNcHhNRkNwbHBYZXBaQTNQNnFLSS83ajZnaF'
2587cc
+                   'RPYmRueG56MgpaU0JWM21kOWt1aVdGY0dldVNlQTErMHlJOFhkMXU0RjBqTk1ZM3JZQjR1NDZQbmJ'
2587cc
+                   'ZNGNzYy9vbDNXNFNXVzZLCkRUcDJoS3NDZ1lCSlpMQys3Uy9zRGVqdkl0MTZ2Q3JzbDJlWlFsb1p0'
2587cc
+                   'clNoVCtTb0hmR1NPRXZkMXp1NStBL3UKaVVDYyt1SHdUa1c0RVpMTEdBYkUzTG1xSllJcXNkNVpUW'
2587cc
+                   'UkxWTZ1TGoyV1NGWFZYUXVLanVlTDZJdGttc1dvZgpyMHFtQU93RHdFVDFvRXlNVUJoOTJVMmhxSHR'
2587cc
+                   'aamlMdkxQdDc5aUhacDNtTnlLVjc5QXY3dVE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=')
2587cc
+
2587cc
+        m.execute("sed -i '/client-certificate-data:/ s/:.*$/: %s/; /client-key-data:/ s/:.*$/: %s/' /home/admin/.kube/config" % (
2587cc
+            old_cert, old_key))
2587cc
+        m.execute("chown -R admin:admin /home/admin/.kube")
2587cc
+        self.login_and_go("/kubernetes")
2587cc
+
2587cc
+        b.wait_present(".curtains-ct")
2587cc
+        b.wait_visible(".curtains-ct")
2587cc
+        b.wait_in_text(".curtains-ct", "Couldn't connect to server")
2587cc
+        b.wait_in_text(".curtains-ct", "Unauthorized")
2587cc
+        b.wait_present(".curtains-ct #kubernetes-reconnect")
2587cc
+
2587cc
+        # now provide a good certificate, and reconnect
2587cc
+        m.upload([self.kubeconfig], "/home/admin/.kube/config")
2587cc
+        m.execute("chown -R admin:admin /home/admin/.kube")
2587cc
+
2587cc
+        b.click("#kubernetes-reconnect")
2587cc
+        b.wait_present("#service-list")
2587cc
+
2587cc
+
2587cc
+@skipImage("Kubernetes not packaged", "debian-stable", "debian-testing", "ubuntu-1604", "ubuntu-stable", "fedora-i386")
2587cc
 @skipImage("No cockpit-kubernetes packaged", "continuous-atomic", "fedora-atomic", "rhel-atomic")
2587cc
 class TestRegistry(MachineCase):
2587cc
     additional_machines = {
2587cc
@@ -325,6 +400,26 @@ class TestRegistry(MachineCase):
2587cc
 
2587cc
         self.browser.wait_timeout(120)
2587cc
 
2587cc
+    def setupDockerRegistry(self):
2587cc
+        """Run a docker registry instance and populate it
2587cc
+
2587cc
+        The OpenShift registry can pull image streams from localhost:5555 for
2587cc
+        testing.
2587cc
+        """
2587cc
+        # set up a docker registry with cert, as openshift registry expects https
2587cc
+        self.openshift.execute("docker run -d -p 5555:5000 --name testreg "
2587cc
+                               "-v /openshift.local.config/master/:/certs "
2587cc
+                               "-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/master.server.crt "
2587cc
+                               "-e REGISTRY_HTTP_TLS_KEY=/certs/master.server.key "
2587cc
+                               "registry:2")
2587cc
+        self.openshift.execute("while ! curl -s --connect-timeout 1 https://localhost:5555/; do sleep 1; done")
2587cc
+        self.addCleanup(self.openshift.execute, "docker rm -f testreg")
2587cc
+
2587cc
+        # populate it with some images
2587cc
+        self.openshift.execute("docker tag registry:5000/marmalade/juggs:latest localhost:5555/juggs:latest; "
2587cc
+                               "docker tag registry:5000/marmalade/juggs:2.11 localhost:5555/juggs:2.11; "
2587cc
+                               "docker push localhost:5555/juggs")
2587cc
+
2587cc
     def testImages(self):
2587cc
         b = self.browser
2587cc
         o = self.openshift
2587cc
@@ -358,7 +453,7 @@ class TestRegistry(MachineCase):
2587cc
         b.click(".listing-ct-head li:last-child a")
2587cc
         b.wait_present(".listing-ct-body .registry-image-layers")
2587cc
         b.wait_visible(".listing-ct-body .registry-image-layers")
2587cc
-        b.wait_in_text(".listing-ct-body .registry-image-layers", "ADD file:")
2587cc
+        b.wait_in_text(".listing-ct-body .registry-image-layers", "KiB")
2587cc
 
2587cc
         # Add postgres into the stream
2587cc
         output = o.execute("oc get imagestream --namespace=marmalade --template='{{.spec}}' busybee")
2587cc
@@ -668,7 +763,7 @@ class TestRegistry(MachineCase):
2587cc
         b.wait_visible("#add_role .dropdown-menu")
2587cc
         b.click("#add_role a[value='Admin']")
2587cc
         b.click(".btn-primary")
2587cc
-        self.assertEqual(b.text(".dialog-error"), "The member name contains invalid characters.")
2587cc
+        b.wait_in_text(".dialog-error", "The member name contains invalid characters.")
2587cc
 
2587cc
         # but email-style user name should be accepted
2587cc
         b.set_val("#add_member_name", "foo@bar.com")
2587cc
@@ -690,7 +785,7 @@ class TestRegistry(MachineCase):
2587cc
         b.set_val("#user_name", "bar ^ baz")
2587cc
         b.set_val("#identities", "anypassword:abc123")
2587cc
         b.click(".btn-primary")
2587cc
-        self.assertEqual(b.text(".dialog-error"), "The name contains invalid characters")
ce15b8
+        b.wait_in_text(".dialog-error", "The name contains invalid characters")
2587cc
 
2587cc
         # email-style user name should be accepted
2587cc
         b.set_val("#user_name", "bar@baz.com")
2587cc
@@ -977,6 +1072,70 @@ class TestRegistry(MachineCase):
2587cc
         # FIXME: known to fail for now, needs fixing in registry-image-widgets
2587cc
         # b.wait_not_visible('.registry-imagestream-push')
2587cc
 
2587cc
+    def testImagestreamImport(self):
2587cc
+        b = self.browser
2587cc
+        self.setupDockerRegistry()
2587cc
+
2587cc
+        # Add new "alltags" image stream pulling from localhost:5555/juggs
2587cc
+        self.login_and_go("/kubernetes/registry#/images/marmalade")
2587cc
+        b.wait_present("a.pull-right span:contains('New image stream')")
2587cc
+        b.click("a.pull-right")
2587cc
+        b.wait_present("modal-dialog")
2587cc
+        b.wait_val("#imagestream-modify-project-text", "marmalade")
2587cc
+        b.set_val("#imagestream-modify-name", "alltags")
2587cc
+        b.wait_present("#imagestream-modify-populate")
2587cc
+        b.click("#imagestream-modify-populate button")
2587cc
+        b.wait_visible("#imagestream-modify-populate .dropdown-menu")
2587cc
+        b.click("#imagestream-modify-populate .dropdown-menu a[value='pull']")
2587cc
+        b.wait_present("#imagestream-modify-pull")
2587cc
+        b.wait_visible("#imagestream-modify-pull")
2587cc
+        b.set_val("#imagestream-modify-pull", "localhost:5555/juggs")
2587cc
+        b.click("modal-dialog div.modal-footer button.btn-primary")
2587cc
+        b.wait_not_present("modal-dialog")
2587cc
+
2587cc
+        # new stream with both "latest" and "2.11" tags should now appear
2587cc
+        b.wait_present("tr.imagestream-item th:contains('marmalade/alltags')")
2587cc
+        b.wait_present('tbody[data-id="marmalade/alltags:latest"]')
2587cc
+        b.wait_present('tbody[data-id="marmalade/alltags:2.11"]')
2587cc
+
2587cc
+        # also check with CLI
2587cc
+        output = self.openshift.execute("oc get imagestream --namespace=marmalade alltags")
2587cc
+        self.assertIn("localhost:5555/juggs", output)
2587cc
+        self.assertIn("latest", output)
2587cc
+        self.assertIn("2.11", output)
2587cc
+
2587cc
+        # Add new "sometags" image stream pulling only the 2.11 tag
2587cc
+        b.click("a.pull-right")
2587cc
+        b.wait_present("modal-dialog")
2587cc
+        b.wait_val("#imagestream-modify-project-text", "marmalade")
2587cc
+        b.set_val("#imagestream-modify-name", "sometags")
2587cc
+        b.wait_present("#imagestream-modify-populate")
2587cc
+        b.click("#imagestream-modify-populate button")
2587cc
+        b.wait_visible("#imagestream-modify-populate .dropdown-menu")
2587cc
+        b.click("#imagestream-modify-populate .dropdown-menu a[value='tags']")
2587cc
+        b.wait_present("#imagestream-modify-tags")
2587cc
+        b.wait_visible("#imagestream-modify-tags")
2587cc
+        b.set_val("#imagestream-modify-pull", "localhost:5555/juggs")
2587cc
+        # fields.tags is not an <input> element, type manually
2587cc
+        b.click("#imagestream-modify-tags")
2587cc
+        b.key_press(['2', '.', '1', '1'])
2587cc
+        b.click("modal-dialog div.modal-footer button.btn-primary")
2587cc
+        b.wait_not_present("modal-dialog")
2587cc
+
2587cc
+        # new stream with only "2.11" tags should now appear
2587cc
+        b.wait_present("tr.imagestream-item th:contains('marmalade/sometags')")
2587cc
+        b.go("/kubernetes/registry#/images/marmalade/sometags")
2587cc
+        # EXFAIL: https://bugzilla.redhat.com/show_bug.cgi?id=1373332
2587cc
+        # b.wait_present('tbody[data-id="marmalade/sometags:2.11"]')
2587cc
+        self.assertFalse(b.is_present('tbody[data-id="marmalade/sometags:latest"]'))
2587cc
+
2587cc
+        # also check with CLI
2587cc
+        output = self.openshift.execute("oc get imagestream --namespace=marmalade sometags")
2587cc
+        self.assertIn("localhost:5555/juggs", output)
2587cc
+        self.assertIn("2.11", output)
2587cc
+        # EXFAIL: https://bugzilla.redhat.com/show_bug.cgi?id=1373332
2587cc
+        # self.assertNotIn("latest", output)
2587cc
+
2587cc
 
2587cc
 if __name__ == '__main__':
2587cc
     test_main()
2587cc
diff --git a/test/verify/kubelib.py b/test/verify/kubelib.py
2587cc
index 1af2c44..5be8aed 100644
2587cc
--- a/test/verify/kubelib.py
2587cc
+++ b/test/verify/kubelib.py
2587cc
@@ -47,6 +47,11 @@ class KubernetesCase(testlib.MachineCase):
2587cc
 
2587cc
     def start_kubernetes(self):
2587cc
         self.machine.execute("systemctl start docker || journalctl -u docker")
2587cc
+
2587cc
+        # HACK: work around https://github.com/kubernetes/kubernetes/issues/43805 until
2587cc
+        # the fix lands in Fedora 26
2587cc
+        if self.machine.image == "fedora-26":
2587cc
+            self.machine.execute("""sed -i '/KUBELET_ARGS=/ { s/"$/ --cgroup-driver=systemd"/ }' /etc/kubernetes/kubelet""")
2587cc
         try:
2587cc
             self.machine.execute('/etc/kubernetes/start-kubernetes')
2587cc
         except subprocess.CalledProcessError:
2587cc
@@ -62,7 +67,9 @@ class KubernetesCase(testlib.MachineCase):
2587cc
         scheme=%s
2587cc
         for a in $(seq 0 $timeout); do
2587cc
             if curl -o /dev/null -k -s $scheme://localhost:$port; then
2587cc
-                break
2587cc
+                if kubectl get all | grep -q svc/kubernetes; then
2587cc
+                    break
2587cc
+                fi
2587cc
             fi
2587cc
             sleep 0.5
2587cc
         done
2587cc
-- 
ce15b8
2.13.5
2587cc