mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 17:09:03 +00:00
94 lines
3.9 KiB
Python
94 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Import Python libs
|
|
from __future__ import absolute_import, print_function, unicode_literals
|
|
|
|
# Import Salt Testing Libs
|
|
from tests.support.mixins import LoaderModuleMockMixin
|
|
from tests.support.unit import skipIf, TestCase
|
|
from tests.support.mock import (
|
|
NO_MOCK,
|
|
NO_MOCK_REASON,
|
|
Mock,
|
|
MagicMock,
|
|
patch
|
|
)
|
|
|
|
# Import Salt Libs
|
|
import salt.states.grafana_datasource as grafana_datasource
|
|
|
|
profile = {
|
|
'grafana_url': 'http://grafana',
|
|
'grafana_token': 'token',
|
|
}
|
|
|
|
|
|
def mock_json_response(data):
|
|
response = MagicMock()
|
|
response.json = MagicMock(return_value=data)
|
|
return Mock(return_value=response)
|
|
|
|
|
|
@skipIf(NO_MOCK, NO_MOCK_REASON)
|
|
class GrafanaDatasourceTestCase(TestCase, LoaderModuleMockMixin):
|
|
def setup_loader_modules(self):
|
|
return {grafana_datasource: {}}
|
|
|
|
def test_present(self):
|
|
with patch('requests.get', mock_json_response([])):
|
|
with patch('requests.post') as rpost:
|
|
ret = grafana_datasource.present('test', 'type', 'url', profile=profile)
|
|
rpost.assert_called_once_with(
|
|
'http://grafana/api/datasources',
|
|
grafana_datasource._get_json_data('test', 'type', 'url'),
|
|
headers={'Authorization': 'Bearer token', 'Accept': 'application/json'},
|
|
timeout=3
|
|
)
|
|
self.assertTrue(ret['result'])
|
|
self.assertEqual(ret['comment'], 'New data source test added')
|
|
|
|
data = grafana_datasource._get_json_data('test', 'type', 'url')
|
|
data.update({'id': 1, 'orgId': 1})
|
|
with patch('requests.get', mock_json_response([data])):
|
|
with patch('requests.put') as rput:
|
|
ret = grafana_datasource.present('test', 'type', 'url', profile=profile)
|
|
rput.assert_called_once_with(
|
|
'http://grafana/api/datasources/1',
|
|
grafana_datasource._get_json_data('test', 'type', 'url'),
|
|
headers={'Authorization': 'Bearer token', 'Accept': 'application/json'},
|
|
timeout=3
|
|
)
|
|
self.assertTrue(ret['result'])
|
|
self.assertEqual(ret['comment'], 'Data source test already up-to-date')
|
|
self.assertEqual(ret['changes'], {})
|
|
|
|
with patch('requests.put') as rput:
|
|
ret = grafana_datasource.present('test', 'type', 'newurl', profile=profile)
|
|
rput.assert_called_once_with(
|
|
'http://grafana/api/datasources/1',
|
|
grafana_datasource._get_json_data('test', 'type', 'newurl'),
|
|
headers={'Authorization': 'Bearer token', 'Accept': 'application/json'},
|
|
timeout=3
|
|
)
|
|
self.assertTrue(ret['result'])
|
|
self.assertEqual(ret['comment'], 'Data source test updated')
|
|
self.assertEqual(ret['changes'], {'old': {'url': 'url'}, 'new': {'url': 'newurl'}})
|
|
|
|
def test_absent(self):
|
|
with patch('requests.get', mock_json_response([])):
|
|
with patch('requests.delete') as rdelete:
|
|
ret = grafana_datasource.absent('test', profile=profile)
|
|
self.assertTrue(rdelete.call_count == 0)
|
|
self.assertTrue(ret['result'])
|
|
self.assertEqual(ret['comment'], 'Data source test already absent')
|
|
|
|
with patch('requests.get', mock_json_response([{'name': 'test', 'id': 1}])):
|
|
with patch('requests.delete') as rdelete:
|
|
ret = grafana_datasource.absent('test', profile=profile)
|
|
rdelete.assert_called_once_with(
|
|
'http://grafana/api/datasources/1',
|
|
headers={'Authorization': 'Bearer token', 'Accept': 'application/json'},
|
|
timeout=3
|
|
)
|
|
self.assertTrue(ret['result'])
|
|
self.assertEqual(ret['comment'], 'Data source test was deleted')
|