| # 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 unittest |
| from libcloud.utils.py3 import httplib |
| |
| try: |
| import simplejson as json |
| except ImportError: |
| import json |
| |
| from libcloud.common.types import InvalidCredsError |
| from libcloud.compute.drivers.gridspot import GridspotNodeDriver |
| from libcloud.compute.types import NodeState |
| |
| from libcloud.test import MockHttp |
| from libcloud.test.compute import TestCaseMixin |
| from libcloud.test.secrets import GRIDSPOT_PARAMS |
| |
| |
| class GridspotTest(unittest.TestCase, TestCaseMixin): |
| def setUp(self): |
| GridspotNodeDriver.connectionCls.conn_class = GridspotMockHttp |
| GridspotMockHttp.type = None |
| self.driver = GridspotNodeDriver(*GRIDSPOT_PARAMS) |
| |
| def test_invalid_creds(self): |
| """ |
| Tests the error-handling for passing a bad API Key to the Gridspot API |
| """ |
| GridspotMockHttp.type = "BAD_AUTH" |
| self.assertRaises(InvalidCredsError, self.driver.list_nodes) |
| |
| def test_list_nodes(self): |
| nodes = self.driver.list_nodes() |
| self.assertEqual(len(nodes), 2) |
| |
| running_node = nodes[0] |
| starting_node = nodes[1] |
| |
| self.assertEqual(running_node.id, "inst_CP2WrQi2WIS4iheyAVkQYw") |
| self.assertEqual(running_node.state, NodeState.RUNNING) |
| self.assertTrue("69.4.239.74" in running_node.public_ips) |
| self.assertEqual(running_node.extra["port"], 62394) |
| self.assertEqual(running_node.extra["vm_ram"], 1429436743) |
| self.assertEqual(running_node.extra["start_state_time"], 1342108905) |
| self.assertEqual(running_node.extra["vm_num_logical_cores"], 8) |
| self.assertEqual(running_node.extra["vm_num_physical_cores"], 4) |
| self.assertEqual( |
| running_node.extra["winning_bid_id"], "bid_X5xhotGYiGUk7_RmIqVafA" |
| ) |
| self.assertFalse("ended_state_time" in running_node.extra) |
| self.assertEqual(running_node.extra["running_state_time"], 1342108989) |
| |
| self.assertEqual(starting_node.id, "inst_CP2WrQi2WIS4iheyAVkQYw2") |
| self.assertEqual(starting_node.state, NodeState.PENDING) |
| self.assertTrue("69.4.239.74" in starting_node.public_ips) |
| self.assertEqual(starting_node.extra["port"], 62395) |
| self.assertEqual(starting_node.extra["vm_ram"], 1429436744) |
| self.assertEqual(starting_node.extra["start_state_time"], 1342108906) |
| self.assertEqual(starting_node.extra["vm_num_logical_cores"], 7) |
| self.assertEqual(starting_node.extra["vm_num_physical_cores"], 5) |
| self.assertEqual( |
| starting_node.extra["winning_bid_id"], "bid_X5xhotGYiGUk7_RmIqVafA1" |
| ) |
| self.assertFalse("ended_state_time" in starting_node.extra) |
| self.assertEqual(starting_node.extra["running_state_time"], 1342108990) |
| |
| def test_create_node(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_destroy_node(self): |
| """ |
| Test destroy_node for Gridspot driver |
| """ |
| node = self.driver.list_nodes()[0] |
| self.assertTrue(self.driver.destroy_node(node)) |
| |
| def test_destroy_node_failure(self): |
| """ |
| Gridspot does not fail a destroy node unless the parameters are bad, in |
| which case it 404s |
| """ |
| pass |
| |
| def test_reboot_node(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_reboot_node_failure(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_resize_node(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_reboot_node_response(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_list_images_response(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_create_node_response(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_destroy_node_response(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_list_sizes_response(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_resize_node_failure(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_list_images(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_list_sizes(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_list_locations(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| def test_list_locations_response(self): |
| """ |
| Gridspot does not implement this functionality |
| """ |
| pass |
| |
| |
| class GridspotMockHttp(MockHttp): |
| def _compute_api_v1_list_instances_BAD_AUTH(self, method, url, body, headers): |
| return (httplib.NOT_FOUND, "", {}, httplib.responses[httplib.NOT_FOUND]) |
| |
| def _compute_api_v1_list_instances(self, method, url, body, headers): |
| body = json.dumps( |
| { |
| "instances": [ |
| { |
| "instance_id": "inst_CP2WrQi2WIS4iheyAVkQYw", |
| "vm_num_logical_cores": 8, |
| "vm_num_physical_cores": 4, |
| "winning_bid_id": "bid_X5xhotGYiGUk7_RmIqVafA", |
| "vm_ram": 1429436743, |
| "start_state_time": 1342108905, |
| "vm_ssh_wan_ip_endpoint": "69.4.239.74:62394", |
| "current_state": "Running", |
| "ended_state_time": "null", |
| "running_state_time": 1342108989, |
| }, |
| { |
| "instance_id": "inst_CP2WrQi2WIS4iheyAVkQYw2", |
| "vm_num_logical_cores": 7, |
| "vm_num_physical_cores": 5, |
| "winning_bid_id": "bid_X5xhotGYiGUk7_RmIqVafA1", |
| "vm_ram": 1429436744, |
| "start_state_time": 1342108906, |
| "vm_ssh_wan_ip_endpoint": "69.4.239.74:62395", |
| "current_state": "Starting", |
| "ended_state_time": "null", |
| "running_state_time": 1342108990, |
| }, |
| ], |
| "exception_name": "", |
| } |
| ) |
| |
| return (httplib.OK, body, {}, httplib.responses[httplib.OK]) |
| |
| def _compute_api_v1_stop_instance(self, method, url, body, headers): |
| body = json.dumps({"exception_name": ""}) |
| |
| return (httplib.OK, body, {}, httplib.responses[httplib.OK]) |
| |
| |
| if __name__ == "__main__": |
| sys.exit(unittest.main()) |