forked from tableau/server-client-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_server_info.py
More file actions
100 lines (84 loc) · 4.71 KB
/
test_server_info.py
File metadata and controls
100 lines (84 loc) · 4.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import json
import os.path
import unittest
import requests_mock
import tableauserverclient as TSC
from tableauserverclient.server.endpoint.exceptions import NonXMLResponseError
TEST_ASSET_DIR = os.path.join(os.path.dirname(__file__), "assets")
SERVER_INFO_GET_XML = os.path.join(TEST_ASSET_DIR, "server_info_get.xml")
SERVER_INFO_25_XML = os.path.join(TEST_ASSET_DIR, "server_info_25.xml")
SERVER_INFO_404 = os.path.join(TEST_ASSET_DIR, "server_info_404.xml")
SERVER_INFO_AUTH_INFO_XML = os.path.join(TEST_ASSET_DIR, "server_info_auth_info.xml")
SERVER_INFO_WRONG_SITE = os.path.join(TEST_ASSET_DIR, "server_info_wrong_site.html")
SERVER_PRODUCT_INFO = os.path.join(TEST_ASSET_DIR, "getServerSettingsUnauthenticated.json")
class ServerInfoTests(unittest.TestCase):
def setUp(self):
self.server = TSC.Server("http://test", False)
self.baseurl = self.server.server_info.baseurl
self.server.version = "2.4"
def test_server_info_get(self):
with open(SERVER_INFO_GET_XML, "rb") as f:
response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.get(self.server.server_info.baseurl, text=response_xml)
m.post(f"{self.server.server_address}/vizportal/api/web/v1/getServerSettingsUnauthenticated", json={})
actual = self.server.server_info.get()
self.assertEqual("10.1.0", actual.product_version)
self.assertEqual("10100.16.1024.2100", actual.build_number)
self.assertEqual("3.10", actual.rest_api_version)
def test_server_info_use_highest_version_downgrades(self):
with open(SERVER_INFO_AUTH_INFO_XML, "rb") as f:
# This is the auth.xml endpoint present back to 9.0 Servers
auth_response_xml = f.read().decode("utf-8")
with open(SERVER_INFO_404, "rb") as f:
# 10.1 serverInfo response
si_response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
# Return a 404 for serverInfo so we can pretend this is an old Server
m.get(self.server.server_address + "/api/2.4/serverInfo", text=si_response_xml, status_code=404)
m.get(self.server.server_address + "/auth?format=xml", text=auth_response_xml)
m.post(f"{self.server.server_address}/vizportal/api/web/v1/getServerSettingsUnauthenticated", json={})
self.server.use_server_version()
# does server-version[9.2] lookup in PRODUCT_TO_REST_VERSION
self.assertEqual(self.server.version, "2.2")
def test_server_info_use_highest_version_upgrades(self):
with open(SERVER_INFO_GET_XML, "rb") as f:
si_response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.get(self.server.server_address + "/api/2.8/serverInfo", text=si_response_xml)
m.post(f"{self.server.server_address}/vizportal/api/web/v1/getServerSettingsUnauthenticated", json={})
# Pretend we're old
self.server.version = "2.8"
self.server.use_server_version()
# Did we upgrade to 3.10?
self.assertEqual(self.server.version, "3.10")
def test_server_use_server_version_flag(self):
with open(SERVER_INFO_25_XML, "rb") as f:
si_response_xml = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.get("http://test/api/2.4/serverInfo", text=si_response_xml)
m.post(f"{self.server.server_address}/vizportal/api/web/v1/getServerSettingsUnauthenticated", json={})
server = TSC.Server("http://test", use_server_version=True)
self.assertEqual(server.version, "2.5")
def test_server_wrong_site(self):
with open(SERVER_INFO_WRONG_SITE, "rb") as f:
response = f.read().decode("utf-8")
with requests_mock.mock() as m:
m.get(self.server.server_info.baseurl, text=response, status_code=404)
with self.assertRaises(NonXMLResponseError):
self.server.server_info.get()
def test_server_info_product(self):
with open(SERVER_PRODUCT_INFO) as f:
product_info_json = json.load(f)
with requests_mock.mock() as m:
m.post(
f"{self.server.server_address}/vizportal/api/web/v1/getServerSettingsUnauthenticated",
json=product_info_json,
)
self.server.use_server_version()
assert self.server._product == "TableauOnline"
def test_server_info_product_no_response(self):
with requests_mock.mock() as m:
m.post(f"{self.server.server_address}/vizportal/api/web/v1/getServerSettingsUnauthenticated", json={})
self.server.use_server_version()
assert self.server._product == "TableauServer"