# 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 string import sys import unittest from mock import Mock, patch from libcloud.common.nfsn import NFSNConnection from libcloud.test import LibcloudTestCase, MockHttp from libcloud.utils.py3 import httplib mock_time = Mock() mock_time.return_value = 1000000 mock_salt = Mock() mock_salt.return_value = 'yumsalty1234' mock_header = 'testid;1000000;yumsalty1234;66dfb282a9532e5b8e6a9517764d5fbc001a4a2e' class NFSNConnectionTestCase(LibcloudTestCase): def setUp(self): NFSNConnection.conn_class = NFSNMockHttp NFSNMockHttp.type = None self.driver = NFSNConnection('testid', 'testsecret') def test_salt_length(self): self.assertEqual(16, len(self.driver._salt())) def test_salt_is_unique(self): s1 = self.driver._salt() s2 = self.driver._salt() self.assertNotEqual(s1, s2) def test_salt_characters(self): """ salt must be alphanumeric """ salt_characters = string.ascii_letters + string.digits for c in self.driver._salt(): self.assertIn(c, salt_characters) @patch('time.time', mock_time) def test_timestamp(self): """ Check that timestamp uses time.time """ self.assertEqual('1000000', self.driver._timestamp()) @patch('time.time', mock_time) @patch('libcloud.common.nfsn.NFSNConnection._salt', mock_salt) def test_auth_header(self): """ Check that X-NFSN-Authentication is set """ response = self.driver.request(action='/testing') self.assertEqual(httplib.OK, response.status) class NFSNMockHttp(MockHttp): def _testing(self, method, url, body, headers): if headers['X-NFSN-Authentication'] == mock_header: return (httplib.OK, '', {}, httplib.responses[httplib.OK]) else: return (httplib.UNAUTHORIZED, '', {}, httplib.responses[httplib.UNAUTHORIZED]) if __name__ == '__main__': sys.exit(unittest.main())