Add unit testing + corrected config validation
Change-Id: I141c052ab7eb054f52011d535ea37114e7367ebe
Related-bug: PROD-24880 (PROD:24880)
diff --git a/run-tests.sh b/run-tests.sh
index ba1f8ce..09f844a 100755
--- a/run-tests.sh
+++ b/run-tests.sh
@@ -1,4 +1,6 @@
#!/bin/bash -x
set -e
+pytest -v
+
exit 0
diff --git a/sf_notifier/salesforce/client.py b/sf_notifier/salesforce/client.py
index 84fc0b4..84e68cb 100644
--- a/sf_notifier/salesforce/client.py
+++ b/sf_notifier/salesforce/client.py
@@ -60,9 +60,7 @@
class SfNotifierError(Exception):
- def __init__(self, message, errors):
- super(SfNotifierError, self).__init__(message)
- self.errors = errors
+ pass
class SalesforceClient(object):
@@ -74,17 +72,21 @@
self._auth()
self._registered_alerts = {}
- def _validate_config(self, config):
- kwargs = {'session': self.session}
+ @staticmethod
+ def _validate_config(config):
+ kwargs = {}
for param, field in CONFIG_FIELD_MAP.iteritems():
setting_var = param.upper()
env_var = 'SFDC_{}'.format(setting_var)
kwargs[field] = os.environ.get(
- env_var, getattr(config, setting_var, None))
+ env_var, config.get(setting_var))
if field == 'domain':
- kwargs[field] = kwargs[field] and 'test'
+ if kwargs[field] is True:
+ kwargs[field] = 'test'
+ else:
+ del kwargs[field]
continue
if kwargs[field] is None:
@@ -95,10 +97,13 @@
return kwargs
def _auth(self):
- self.sf = Salesforce(**self.config)
+ kwargs = {'session': self.session}
+ kwargs.update(self.config)
+ self.sf = Salesforce(**kwargs)
logger.info('Salesforce authentication successful.')
- def _get_alert_id(self, labels):
+ @staticmethod
+ def _get_alert_id(labels):
alert_id_data = ''
for key in sorted(labels):
alert_id_data += labels[key].replace(".", "\\.")
diff --git a/sf_notifier/tests/__init__.py b/sf_notifier/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sf_notifier/tests/__init__.py
diff --git a/sf_notifier/tests/test_client.py b/sf_notifier/tests/test_client.py
new file mode 100644
index 0000000..b62eaa0
--- /dev/null
+++ b/sf_notifier/tests/test_client.py
@@ -0,0 +1,115 @@
+import os
+
+import pytest
+
+from sf_notifier.salesforce.client import SalesforceClient, SfNotifierError
+
+
+ENV_VARS = [
+ 'SFDC_AUTH_URL',
+ 'SFDC_USERNAME',
+ 'SFDC_PASSWORD',
+ 'SFDC_ORGANIZATION_ID',
+ 'SFDC_ENVIRONMENT_ID',
+ 'SFDC_SANDBOX_ENABLED'
+]
+
+
+def unset_env_vars():
+ for v in ENV_VARS:
+ if os.environ.get(v):
+ del os.environ[v]
+
+
+def test_validate_config():
+ OK_CONFIG_1 = [
+ {
+ 'AUTH_URL': 'instance_xxx',
+ 'USERNAME': 'username_xxx',
+ 'PASSWORD': 'password_xxx',
+ 'ORGANIZATION_ID': 'org_xxx',
+ 'ENVIRONMENT_ID': 'env_xxx',
+ 'SANDBOX_ENABLED': True
+ },
+ {
+ 'instance': 'instance_xxx',
+ 'username': 'username_xxx',
+ 'password': 'password_xxx',
+ 'organizationId': 'org_xxx',
+ 'environment_id': 'env_xxx',
+ 'domain': 'test'
+ }
+ ]
+ OK_CONFIG_2 = [
+ {
+ 'AUTH_URL': 'instance_xxx',
+ 'USERNAME': 'username_xxx',
+ 'PASSWORD': 'password_xxx',
+ 'ORGANIZATION_ID': 'org_xxx',
+ 'ENVIRONMENT_ID': 'env_xxx'
+ },
+ {
+ 'instance': 'instance_xxx',
+ 'username': 'username_xxx',
+ 'password': 'password_xxx',
+ 'organizationId': 'org_xxx',
+ 'environment_id': 'env_xxx'
+ }
+ ]
+ WRONG_CONFIG = {
+ 'AUTH_URL': 'xxx',
+ 'USERNAME': 'xxx',
+ 'PASSWORD': 'xxx',
+ 'ORGANIZATION_ID': 'xxx',
+ 'SANDBOX_ENABLED': True
+ }
+
+ unset_env_vars()
+
+ assert SalesforceClient._validate_config(OK_CONFIG_1[0]) == OK_CONFIG_1[1]
+ assert SalesforceClient._validate_config(OK_CONFIG_2[0]) == OK_CONFIG_2[1]
+ pytest.raises(SfNotifierError,
+ SalesforceClient._validate_config, WRONG_CONFIG)
+
+
+def test_alert_id_generate():
+ LABELS = {
+ 'alertname': 'ApacheServiceDown',
+ 'environment': 'testing_env',
+ 'host': 'mdb01',
+ 'instance': 'mdb01;telegraf',
+ 'job': 'telegraf',
+ 'region': 'region1',
+ 'route': 'email,salesforce',
+ 'service': 'apache',
+ 'severity': 'minor'
+ }
+ SAME_LABELS = {
+ 'environment': 'testing_env',
+ 'service': 'apache',
+ 'route': 'email,salesforce',
+ 'instance': 'mdb01;telegraf',
+ 'host': 'mdb01',
+ 'severity': 'minor',
+ 'region': 'region1',
+ 'alertname': 'ApacheServiceDown',
+ 'job': 'telegraf'
+ }
+ DIFF_LABELS = {
+ 'environment': 'testing_env',
+ 'service': 'apache',
+ 'route': 'email,salesforce',
+ 'instance': 'mdb01;telegraf',
+ 'host': 'mdb01',
+ 'severity': 'minor',
+ 'region': 'region1',
+ 'alertname': 'ApacheServiceDow',
+ 'job': 'telegraf'
+ }
+
+ unset_env_vars()
+
+ alert_id = SalesforceClient._get_alert_id(LABELS)
+
+ assert alert_id == SalesforceClient._get_alert_id(SAME_LABELS)
+ assert alert_id != SalesforceClient._get_alert_id(DIFF_LABELS)
diff --git a/test-requirements.txt b/test-requirements.txt
index 05c2b98..de162a9 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -6,4 +6,5 @@
flake8-import-order>=0.17.1 #LGPLv3
bandit>=1.1.0 # Apache-2.0
sphinx!=1.6.6,!=1.6.7,>=1.6.2 # BSD
-
+pytest==4.0.1
+pytest-mock==1.10.0