def setUp(self, m_etcd_client, m_getenv):
     def get_env(key, default=""):
         if key == "ETCD_AUTHORITY":
             return "127.0.0.2:4002"
         else:
             return default
     m_getenv.side_effect = get_env
     self.etcd_client = Mock(spec=EtcdClient)
     m_etcd_client.return_value = self.etcd_client
     self.datastore = LibnetworkDatastoreClient()
     m_etcd_client.assert_called_once_with(host="127.0.0.2", port=4002,
                                           protocol="http", cert=None,
                                           ca_cert=None)
示例#2
0
#
#     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 unittest

from nose.tools import assert_equal, assert_true, assert_false

from libnetwork.datastore_libnetwork import LibnetworkDatastoreClient

# We test using a real etcd back end.
client = LibnetworkDatastoreClient()

TEST_ENDPOINT_ID = "abcdefg123456"


class TestLibnetworkDatastoreClient(unittest.TestCase):
    def setUp(self):
        client.remove_all_data()

    def test_cnm_endpoint_read_write(self):
        """
        Test reading and writing an CNM endpoint.
        """
        data = {"test": 1, "test2": 2}

        # Endpoint should not exist at first, attempts to read it return None.
class TestLibnetworkDatastoreClient(unittest.TestCase):

    @patch("pycalico.datastore.os.getenv", autospec=True)
    @patch("pycalico.datastore.etcd.Client", autospec=True)
    def setUp(self, m_etcd_client, m_getenv):
        def get_env(key, default=""):
            if key == "ETCD_AUTHORITY":
                return "127.0.0.2:4002"
            else:
                return default
        m_getenv.side_effect = get_env
        self.etcd_client = Mock(spec=EtcdClient)
        m_etcd_client.return_value = self.etcd_client
        self.datastore = LibnetworkDatastoreClient()
        m_etcd_client.assert_called_once_with(host="127.0.0.2", port=4002,
                                              protocol="http", cert=None,
                                              ca_cert=None)

    def tearDown(self):
        pass

    def test_get_network(self):
        """
        Test get_network() returns correct data.
        :return:
        """
        etcd_entry = Mock()
        etcd_entry.value = TEST_JSON
        self.etcd_client.read.return_value = etcd_entry
        self.assertDictEqual(self.datastore.get_network(TEST_NETWORK_ID),
                             TEST_DATA)
        self.etcd_client.read.assert_called_once_with(TEST_NETWORK_DIR)

    def test_get_network_not_found(self):
        """
        Test get_network() returns None when the network is not found.
        :return:
        """
        self.etcd_client.read.side_effect = EtcdKeyNotFound
        self.assertEquals(self.datastore.get_network(TEST_NETWORK_ID), None)
        self.etcd_client.read.assert_called_once_with(TEST_NETWORK_DIR)

    def test_write_network(self):
        """
        Test write_network() sends correct data to etcd.
        """
        test_data = TEST_DATA
        self.datastore.write_network(TEST_NETWORK_ID, test_data)
        self.etcd_client.write.assert_called_once_with(TEST_NETWORK_DIR,
                                                       TEST_JSON)

    def test_remove_network(self):
        """
        Test remove_network() when the network is present.
        """
        self.assertTrue(self.datastore.remove_network(TEST_NETWORK_ID))
        self.etcd_client.delete.assert_called_once_with(TEST_NETWORK_DIR)

    def test_remove_network_not_found(self):
        """
        Test remove_network() when the network is not found.
        """
        self.etcd_client.delete.side_effect = EtcdKeyNotFound
        self.assertFalse(self.datastore.remove_network(TEST_NETWORK_ID))
        self.etcd_client.delete.assert_called_once_with(TEST_NETWORK_DIR)