def test_post_node_success(self, m_load_neighbordb, m_repository): node = create_node() definition = create_definition() definition.add_action() cfg = {'return_value.exists.return_value': False} m_repository.configure_mock(**cfg) cfg = {'return_value.match_node.return_value': [Mock()]} m_load_neighbordb.configure_mock(**cfg) request = Request.blank('/nodes', body=node.as_json(), method='POST', headers=ztp_headers()) resp = request.get_response(ztpserver.controller.Router()) args_list = list() args_list.append('nodes/%s/%s' % (node.serialnumber, DEFINITION_FN)) args_list.append('nodes/%s/%s' % (node.serialnumber, PATTERN_FN)) for arg in args_list: m_repository.return_value.add_file.assert_any_call(arg) location = 'http://localhost/nodes/%s' % node.serialnumber self.assertEqual(resp.status_code, constants.HTTP_STATUS_CREATED) self.assertEqual(resp.location, location)
def test_get_bootstrap_misconfigured(self, m_substitute): m_substitute.side_effect = KeyError request = Request.blank('/bootstrap', headers=ztp_headers()) resp = request.get_response(ztpserver.controller.Router()) self.assertEqual(resp.status_code, constants.HTTP_STATUS_BAD_REQUEST) self.assertEqual(resp.content_type, constants.CONTENT_TYPE_HTML)
def test_missing_required_attributes(self, m_repository): url = '/nodes' body = json.dumps(dict()) request = Request.blank(url, body=body, method='POST', headers=ztp_headers()) resp = request.get_response(ztpserver.controller.Router()) self.assertEqual(resp.status_code, constants.HTTP_STATUS_BAD_REQUEST)
def test_get_bootstrap_inaccessible(self): cfg = {'return_value.get_file.side_effect': FileObjectError} self.m_repository.configure_mock(**cfg) request = Request.blank('/bootstrap', headers=ztp_headers()) resp = request.get_response(ztpserver.controller.Router()) self.assertEqual(resp.status_code, constants.HTTP_STATUS_BAD_REQUEST) self.assertEqual(resp.content_type, constants.CONTENT_TYPE_HTML)
def test_get_bootstrap_success(self, m_substitute): contents = random_string() m_substitute.return_value = contents request = Request.blank('/bootstrap', headers=ztp_headers()) resp = request.get_response(ztpserver.controller.Router()) self.assertEqual(resp.status_code, constants.HTTP_STATUS_OK) self.assertEqual(resp.content_type, constants.CONTENT_TYPE_PYTHON) self.assertEqual(resp.body, contents)
def test_missing_required_attributes(self): url = '/nodes' body = json.dumps(dict()) ztpserver.controller.create_file_store = Mock() request = Request.blank(url, body=body, method='POST', headers=ztp_headers()) resp = request.get_response(ztpserver.controller.Router()) self.assertEqual(resp.status_code, 400)
def test_get_bootstrap(self): contents = random_string() filestore = Mock() ztpserver.controller.create_file_store = filestore filestore.return_value.get_file.return_value = Mock(contents=contents) request = Request.blank('/bootstrap', headers=ztp_headers()) resp = request.get_response(ztpserver.controller.Router()) self.assertEqual(resp.status_code, 200) self.assertEqual(resp.content_type, 'text/x-python') self.assertEqual(resp.body, contents)
def test_post_config(self, m_repository): url = '/nodes' serialnumber = random_string() config = random_string() body = json.dumps(dict(serialnumber=serialnumber, config=config)) m_repository.return_value.exists.return_value = False request = Request.blank(url, body=body, method='POST', headers=ztp_headers()) resp = request.get_response(ztpserver.controller.Router()) location = 'http://localhost/nodes/%s' % serialnumber self.assertEqual(resp.status_code, constants.HTTP_STATUS_CREATED) self.assertEqual(resp.location, location)
def test_node_exists(self): url = '/nodes' systemmac = random_string() body = json.dumps(dict(systemmac=systemmac)) filestore = Mock() filestore.exists.return_value = True ztpserver.controller.create_file_store = filestore request = Request.blank(url, body=body, method='POST', headers=ztp_headers()) resp = request.get_response(ztpserver.controller.Router()) location = 'http://localhost/nodes/%s' % systemmac self.assertTrue(filestore.return_value.write_file.called) self.assertEqual(resp.status_code, 409) self.assertEqual(resp.location, location)
def test_get_bootstrap_config(self): logging = [dict(destination=random_string(), level=random_string())] xmpp = dict(username=random_string(), domain=random_string(), password=random_string(), rooms=[random_string()]) conf = dict(logging=logging, xmpp=xmpp) conf = json.dumps(conf) filestore = Mock() ztpserver.controller.create_file_store = filestore filestore.return_value.get_file.return_value.contents = conf request = Request.blank('/bootstrap/config', headers=ztp_headers()) resp = request.get_response(ztpserver.controller.Router()) self.assertEqual(resp.status_code, 200) self.assertEqual(resp.content_type, 'application/json') self.assertEqual(resp.body, conf)
def test_post_config(self): url = '/nodes' systemmac = random_string() config = random_string() body = json.dumps(dict(systemmac=systemmac, config=config)) filestore = Mock() filestore.return_value.exists.return_value = False ztpserver.controller.create_file_store = filestore request = Request.blank(url, body=body, method='POST', headers=ztp_headers()) resp = request.get_response(ztpserver.controller.Router()) location = 'http://localhost/nodes/%s' % systemmac filename = '%s/startup-config' % systemmac filestore.return_value.add_folder.assert_called_with(systemmac) filestore.return_value.write_file.assert_called_with(filename, config) self.assertEqual(resp.status_code, 201) self.assertEqual(resp.location, location)
def test_post_node_success(self): node = create_node() definition_file = create_definition() definition_file.add_action() filestore = Mock() filestore.return_value.exists.return_value = False filestore.return_value.get_file.return_value.contents = \ definition_file.as_yaml() ztpserver.controller.create_file_store = filestore ztpserver.neighbordb.topology.match_node = Mock(return_value=[Mock()]) request = Request.blank('/nodes', body=node.as_json(), method='POST', headers=ztp_headers()) resp = request.get_response(ztpserver.controller.Router()) location = 'http://localhost/nodes/%s' % node.systemmac self.assertEqual(resp.status_code, 201) self.assertEqual(resp.location, location)