RIFT OSM R1 Initial Submission
[osm/SO.git] / rwlaunchpad / ra / pytest / conftest.py
diff --git a/rwlaunchpad/ra/pytest/conftest.py b/rwlaunchpad/ra/pytest/conftest.py
new file mode 100644 (file)
index 0000000..fc094fa
--- /dev/null
@@ -0,0 +1,131 @@
+
+# 
+#   Copyright 2016 RIFT.IO Inc
+#
+#   Licensed 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 pytest
+import os
+import subprocess
+import sys
+
+import rift.auto.log
+import rift.auto.session
+import rift.vcs.vcs
+import logging
+
+import gi
+gi.require_version('RwCloudYang', '1.0')
+
+from gi.repository import RwCloudYang
+
+@pytest.fixture(scope='session')
+def cloud_name_prefix():
+    '''fixture which returns the prefix used in cloud account names'''
+    return 'cloud'
+
+@pytest.fixture(scope='session')
+def cloud_account_name(cloud_name_prefix):
+    '''fixture which returns the name used to identify the cloud account'''
+    return '{prefix}-0'.format(prefix=cloud_name_prefix)
+
+@pytest.fixture(scope='session')
+def sdn_account_name():
+    '''fixture which returns the name used to identify the sdn account'''
+    return 'sdn-0'
+
+@pytest.fixture(scope='session')
+def sdn_account_type():
+    '''fixture which returns the account type used by the sdn account'''
+    return 'odl'
+
+@pytest.fixture(scope='session')
+def cloud_module():
+    '''Fixture containing the module which defines cloud account
+    Returns:
+        module to be used when configuring a cloud account
+    '''
+    return RwCloudYang
+
+@pytest.fixture(scope='session')
+def cloud_xpath():
+    '''Fixture containing the xpath that should be used to configure a cloud account
+    Returns:
+        xpath to be used when configure a cloud account
+    '''
+    return '/cloud/account'
+
+@pytest.fixture(scope='session')
+def cloud_accounts(cloud_module, cloud_name_prefix, cloud_host, cloud_user, cloud_tenants, cloud_type):
+    '''fixture which returns a list of CloudAccounts. One per tenant provided
+
+    Arguments:
+        cloud_module        - fixture: module defining cloud account
+        cloud_name_prefix   - fixture: name prefix used for cloud account
+        cloud_host          - fixture: cloud host address
+        cloud_user          - fixture: cloud account user key
+        cloud_tenants       - fixture: list of tenants to create cloud accounts on
+        cloud_type          - fixture: cloud account type
+
+    Returns:
+        A list of CloudAccounts
+    '''
+    accounts = []
+    for idx, cloud_tenant in enumerate(cloud_tenants):
+        cloud_account_name = "{prefix}-{idx}".format(prefix=cloud_name_prefix, idx=idx)
+
+        if cloud_type == 'lxc':
+            accounts.append(
+                    cloud_module.CloudAccount.from_dict({
+                        "name": cloud_account_name,
+                        "account_type": "cloudsim_proxy"})
+            )
+        elif cloud_type == 'openstack':
+            password = 'mypasswd'
+            auth_url = 'http://{cloud_host}:5000/v3/'.format(cloud_host=cloud_host)
+            mgmt_network = os.getenv('MGMT_NETWORK', 'private')
+            accounts.append(
+                    cloud_module.CloudAccount.from_dict({
+                        'name':  cloud_account_name,
+                        'account_type': 'openstack',
+                        'openstack': {
+                            'admin': True,
+                            'key': cloud_user,
+                            'secret': password,
+                            'auth_url': auth_url,
+                            'tenant': cloud_tenant,
+                            'mgmt_network': mgmt_network}})
+            )
+        elif cloud_type == 'mock':
+            accounts.append(
+                    cloud_module.CloudAccount.from_dict({
+                        "name": cloud_account_name,
+                        "account_type": "mock"})
+            )
+
+    return accounts
+
+
+@pytest.fixture(scope='session', autouse=True)
+def cloud_account(cloud_accounts):
+    '''fixture which returns an instance of CloudAccount
+
+    Arguments:
+        cloud_accounts - fixture: list of generated cloud accounts
+
+    Returns:
+        An instance of CloudAccount
+    '''
+    return cloud_accounts[0]
+