blob: 9b5cae751b6f33bfd1591173272ba77c5c8f7ea6 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
import sys
from libcloud.utils.py3 import httplib
from libcloud.container.base import ContainerImage
from libcloud.container.drivers.kubernetes import KubernetesContainerDriver
from libcloud.test.secrets import CONTAINER_PARAMS_KUBERNETES
from libcloud.test.common.test_kubernetes import KubernetesAuthTestCaseMixin
from libcloud.test.file_fixtures import ContainerFileFixtures
from libcloud.test import MockHttp
from libcloud.test import unittest
class KubernetesContainerDriverTestCase(unittest.TestCase, KubernetesAuthTestCaseMixin):
driver_cls = KubernetesContainerDriver
def setUp(self):
KubernetesContainerDriver.connectionCls.conn_class = KubernetesMockHttp
KubernetesMockHttp.type = None
KubernetesMockHttp.use_param = "a"
self.driver = KubernetesContainerDriver(*CONTAINER_PARAMS_KUBERNETES)
def test_list_containers(self):
containers = self.driver.list_containers()
self.assertEqual(len(containers), 1)
self.assertEqual(
containers[0].id,
"docker://3c48b5cda79bce4c8866f02a3b96a024edb8f660d10e7d1755e9ced49ef47b36",
)
self.assertEqual(containers[0].name, "hello-world")
def test_list_clusters(self):
clusters = self.driver.list_clusters()
self.assertEqual(len(clusters), 2)
self.assertEqual(clusters[0].id, "default")
self.assertEqual(clusters[0].name, "default")
def test_get_cluster(self):
cluster = self.driver.get_cluster("default")
self.assertEqual(cluster.id, "default")
self.assertEqual(cluster.name, "default")
def test_create_cluster(self):
cluster = self.driver.create_cluster("test")
self.assertEqual(cluster.id, "test")
self.assertEqual(cluster.name, "test")
def test_destroy_cluster(self):
cluster = self.driver.get_cluster("default")
result = self.driver.destroy_cluster(cluster)
self.assertTrue(result)
def test_deploy_container(self):
image = ContainerImage(
id=None, name="hello-world", path=None, driver=self.driver, version=None
)
container = self.driver.deploy_container("hello-world", image=image)
self.assertEqual(container.name, "hello-world")
def test_get_container(self):
container = self.driver.get_container(
"docker://3c48b5cda79bce4c8866f02a3b96a024edb8f660d10e7d1755e9ced49ef47b36"
)
assert (
container.id
== "docker://3c48b5cda79bce4c8866f02a3b96a024edb8f660d10e7d1755e9ced49ef47b36"
)
class KubernetesMockHttp(MockHttp):
fixtures = ContainerFileFixtures("kubernetes")
def _api_v1_pods(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load("_api_v1_pods.json")
else:
raise AssertionError("Unsupported method")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
def _api_v1_namespaces(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load("_api_v1_namespaces.json")
elif method == "POST":
body = self.fixtures.load("_api_v1_namespaces_test.json")
else:
raise AssertionError("Unsupported method")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
def _api_v1_namespaces_default(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load("_api_v1_namespaces_default.json")
elif method == "DELETE":
body = self.fixtures.load("_api_v1_namespaces_default_DELETE.json")
else:
raise AssertionError("Unsupported method")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
def _api_v1_namespaces_default_pods(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load("_api_v1_namespaces_default_pods.json")
elif method == "POST":
body = self.fixtures.load("_api_v1_namespaces_default_pods_POST.json")
else:
raise AssertionError("Unsupported method")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
if __name__ == "__main__":
sys.exit(unittest.main())