blob: 386e4d767325d445253be31448d3ef92cb8f6bb8 [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
import json
import time
import base64
import unittest
from unittest import mock
import libcloud.common.gig_g8
from libcloud.test import MockHttp
from libcloud.utils.py3 import httplib
from libcloud.compute.base import Node, NodeSize, NodeImage, StorageVolume
from libcloud.test.file_fixtures import ComputeFileFixtures
from libcloud.compute.drivers.gig_g8 import G8Network, G8NodeDriver, G8PortForward
# For tests we don't want to actually verify a token since we use an expired on
original_is_jwt_expired = libcloud.common.gig_g8.is_jwt_expired
def mock_is_jwt_expired(jwt):
return False
class G8MockHttp(MockHttp):
"""Fixtures needed for tests related to rating model"""
fixtures = ComputeFileFixtures("gig_g8")
def __getattr__(self, key):
def method(method, path, params, headers):
response = self.fixtures.load("{}_{}.json".format(method, key.lstrip("_")))
return (httplib.OK, response, {}, httplib.responses[httplib.OK])
return method
@mock.patch("libcloud.common.gig_g8.is_jwt_expired", mock_is_jwt_expired)
class G8Tests(unittest.TestCase):
def setUp(self):
G8NodeDriver.connectionCls.conn_class = G8MockHttp
self.driver = G8NodeDriver(
1,
"header.eyJhenAiOiJkZndlcmdyZWdyZSIsImV4cCI6MTU5MDUyMzEwNSwiaXNzIjoiaXRzeW91b25saW5lIiwicmVmcmVzaF90b2tlbiI6Inh4eHh4eHgiLCJzY29wZSI6WyJ1c2VyOmFkbWluIl0sInVzZXJuYW1lIjoiZXhhbXBsZSJ9.signature",
"https://myg8.example.com",
)
def test_list_networks(self):
networks = self.driver.ex_list_networks()
self.assertGreater(len(networks), 0)
for network in networks:
self.assertIsInstance(network, G8Network)
def test_list_nodes(self):
nodes = self.driver.list_nodes()
self.assertGreater(len(nodes), 0)
for node in nodes:
self.assertIsInstance(node, Node)
def test_list_sizes(self):
sizes = self.driver.list_sizes()
self.assertGreater(len(sizes), 0)
for size in sizes:
self.assertIsInstance(size, NodeSize)
def test_list_images(self):
images = self.driver.list_images()
self.assertGreater(len(images), 0)
for image in images:
self.assertIsInstance(image, NodeImage)
def test_create_node(self):
image = self.driver.list_images()[0]
size = self.driver.list_sizes()[0]
network = self.driver.ex_list_networks()[0]
node = self.driver.create_node("my test", image, network, "my description", size)
self.assertIsInstance(node, Node)
def test_stop_node(self):
node = self.driver.list_nodes()[0]
result = self.driver.stop_node(node)
self.assertTrue(result)
def test_reboot_node(self):
node = self.driver.list_nodes()[0]
result = self.driver.reboot_node(node)
self.assertTrue(result)
def test_destroy_node(self):
node = self.driver.list_nodes()[0]
result = self.driver.destroy_node(node)
self.assertTrue(result)
def test_start_node(self):
node = self.driver.list_nodes()[0]
result = self.driver.start_node(node)
self.assertTrue(result)
def test_create_network(self):
network = self.driver.ex_create_network("my network")
self.assertIsInstance(network, G8Network)
def test_destroy_network(self):
network = self.driver.ex_list_networks()[0]
result = self.driver.ex_destroy_network(network)
self.assertTrue(result)
def test_list_portforward(self):
network = self.driver.ex_list_networks()[0]
forwards = self.driver.ex_list_portforwards(network)
self.assertGreater(len(forwards), 0)
for forward in forwards:
self.assertIsInstance(forward, G8PortForward)
def test_create_forward(self):
network = self.driver.ex_list_networks()[0]
node = self.driver.list_nodes()[0]
result = self.driver.ex_create_portforward(network, node, 34022, 22)
self.assertIsInstance(result, G8PortForward)
def test_delete_portforward(self):
network = self.driver.ex_list_networks()[0]
forward = self.driver.ex_list_portforwards(network)[0]
res = self.driver.ex_delete_portforward(forward)
self.assertTrue(res)
def test_list_volumes(self):
volumes = self.driver.list_volumes()
self.assertGreater(len(volumes), 1)
for volume in volumes:
self.assertIsInstance(volume, StorageVolume)
def test_create_volume(self):
volume = self.driver.create_volume(10, "my volume", "my description")
self.assertIsInstance(volume, StorageVolume)
def test_destroy_volume(self):
volume = self.driver.list_volumes()[0]
res = self.driver.destroy_volume(volume)
self.assertTrue(res)
def test_attach_volume(self):
volume = self.driver.list_volumes()[0]
node = self.driver.list_nodes()[0]
res = self.driver.attach_volume(node, volume)
self.assertTrue(res)
def test_detach_volume(self):
volume = self.driver.list_volumes()[0]
node = self.driver.list_nodes()[0]
res = self.driver.detach_volume(node, volume)
self.assertTrue(res)
def test_is_jwt_expired(self):
data = {
"azp": "example",
"exp": int(time.time()),
"iss": "itsyouonline",
"refresh_token": "xxxxxxx",
"scope": ["user:admin"],
"username": "example",
}
def contruct_jwt(data):
jsondata = json.dumps(data).encode()
return "header.{}.signature".format(base64.encodebytes(jsondata).decode())
libcloud.common.gig_g8.is_jwt_expired = original_is_jwt_expired
self.assertTrue(libcloud.common.gig_g8.is_jwt_expired(contruct_jwt(data)))
data["exp"] = int(time.time()) + 300 # expire in 5min
self.assertFalse(libcloud.common.gig_g8.is_jwt_expired(contruct_jwt(data)))
if __name__ == "__main__":
sys.exit(unittest.main())