Add nfdeployment handlers
[pti/o2.git] / helm_sdk / tests / test_sdk.py
diff --git a/helm_sdk/tests/test_sdk.py b/helm_sdk/tests/test_sdk.py
new file mode 100644 (file)
index 0000000..2a454fe
--- /dev/null
@@ -0,0 +1,162 @@
+########
+# Copyright (c) 2019 Cloudify Platform Ltd. All rights reserved
+#
+# 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 mock
+
+from . import HelmTestBase, HELM_BINARY
+from helm_sdk.exceptions import CloudifyHelmSDKError
+
+mock_flags = [{'name': 'dry-run'},
+              {'name': 'timeout', 'value': '100'}]
+mock_set_args = [{'name': 'x', 'value': 'y'},
+                 {'name': 'a', 'value': 'b'}]
+
+
+class HelmSDKTest(HelmTestBase):
+
+    def test_install_with_token_and_api(self):
+        with self.assertRaisesRegexp(CloudifyHelmSDKError,
+                                     'Must provide kubeconfig file path.'):
+            self.helm.install('release1',
+                              'my_chart',
+                              mock_flags,
+                              mock_set_args,
+                              token='demotoken',
+                              apiserver='https://1.0.0.0')
+
+    def test_install_with_kubeconfig(self):
+        mock_execute = mock.Mock(return_value='{"manifest":"resourceA"}')
+        self.helm.execute = mock_execute
+        out = self.helm.install('release1',
+                                'my_chart',
+                                mock_flags,
+                                mock_set_args,
+                                kubeconfig='/path/to/config')
+        cmd_expected = [HELM_BINARY, 'install', 'release1', 'my_chart',
+                        '--wait', '--output=json',
+                        '--kubeconfig=/path/to/config', '--dry-run',
+                        '--timeout=100', '--set', 'x=y', '--set', 'a=b']
+        mock_execute.assert_called_once_with(cmd_expected, True)
+        self.assertEqual(out, {"manifest": "resourceA"})
+
+    def test_install_no_token_and_no_kubeconfig(self):
+        with self.assertRaisesRegexp(CloudifyHelmSDKError,
+                                     'Must provide kubeconfig file path.'):
+            self.helm.install('release1',
+                              'my_chart',
+                              mock_flags,
+                              mock_set_args,
+                              apiserver='https://1.0.0.0')
+
+    def test_install_no_apiserver_and_no_kubeconfig(self):
+        with self.assertRaisesRegexp(CloudifyHelmSDKError,
+                                     'Must provide kubeconfig file path.'):
+            self.helm.install('release1',
+                              'my_chart',
+                              mock_flags,
+                              mock_set_args,
+                              token='demotoken')
+
+    def test_uninstall_with_kubekonfig(self):
+        mock_execute = mock.Mock()
+        self.helm.execute = mock_execute
+        self.helm.uninstall('release1',
+                            mock_flags,
+                            kubeconfig='/path/to/config')
+        cmd_expected = [HELM_BINARY, 'uninstall', 'release1',
+                        '--kubeconfig=/path/to/config', '--dry-run',
+                        '--timeout=100']
+        mock_execute.assert_called_once_with(cmd_expected)
+
+    def test_uninstall_no_token_and_no_kubeconfig(self):
+        with self.assertRaisesRegexp(CloudifyHelmSDKError,
+                                     'Must provide kubeconfig file path.'):
+            self.helm.uninstall('release1',
+                                mock_flags,
+                                apiserver='https://1.0.0.0')
+
+    def test_uninstall_no_apiserver_and_no_kubeconfig(self):
+        with self.assertRaisesRegexp(CloudifyHelmSDKError,
+                                     'Must provide kubeconfig file path.'):
+            self.helm.uninstall('release1',
+                                mock_flags,
+                                token='demotoken')
+
+    def test_repo_add(self):
+        mock_execute = mock.Mock()
+        self.helm.execute = mock_execute
+        self.helm.repo_add('my_repo', 'https://github.com/repo')
+        cmd_expected = [HELM_BINARY, 'repo', 'add', 'my_repo',
+                        'https://github.com/repo']
+        mock_execute.assert_called_once_with(cmd_expected)
+
+    def test_repo_remove(self):
+        mock_execute = mock.Mock()
+        self.helm.execute = mock_execute
+        self.helm.repo_remove('my_repo')
+        cmd_expected = [HELM_BINARY, 'repo', 'remove', 'my_repo']
+        mock_execute.assert_called_once_with(cmd_expected)
+
+    def test_upgrade_with_token_and_api(self):
+        with self.assertRaisesRegexp(CloudifyHelmSDKError,
+                                     'Must provide kubeconfig file path.'):
+            self.helm.upgrade('release1',
+                              'example/mariadb',
+                              mock_flags,
+                              mock_set_args,
+                              token='demotoken',
+                              apiserver='https://1.0.0.0')
+
+    def test_upgrade_with_kubeconfig(self):
+        mock_execute = mock.Mock(return_value='{"name":"release1"}')
+        self.helm.execute = mock_execute
+        out = self.helm.upgrade('release1',
+                                'my_chart',
+                                mock_flags,
+                                mock_set_args,
+                                kubeconfig='/path/to/config')
+        cmd_expected = [HELM_BINARY, 'upgrade', 'release1', 'my_chart',
+                        '--atomic', '-o=json', '--kubeconfig=/path/to/config',
+                        '--dry-run', '--timeout=100', '--set', 'x=y', '--set',
+                        'a=b']
+        mock_execute.assert_called_once_with(cmd_expected, True)
+        self.assertEqual(out, {"name": "release1"})
+
+    def test_upgrade_no_token_and_no_kubeconfig(self):
+        with self.assertRaisesRegexp(CloudifyHelmSDKError,
+                                     'Must provide kubeconfig file path.'):
+            self.helm.upgrade('release1',
+                              'my_chart',
+                              mock_flags,
+                              mock_set_args,
+                              apiserver='https://1.0.0.0')
+
+    def test_upgrade_no_apiserver_and_no_kubeconfig(self):
+        with self.assertRaisesRegexp(CloudifyHelmSDKError,
+                                     'Must provide kubeconfig file path.'):
+            self.helm.upgrade('release1',
+                              'my_chart',
+                              mock_flags,
+                              mock_set_args,
+                              token='demotoken')
+
+    def test_upgrade_no_chart(self):
+        with self.assertRaisesRegexp(CloudifyHelmSDKError,
+                                     'Must provide chart for upgrade '
+                                     'release.'):
+            self.helm.upgrade(release_name='release1',
+                              flags=mock_flags,
+                              set_values=mock_set_args,
+                              kubeconfig='/path/to/config')