Commit 3d407f8a authored by Łukasz Nowak's avatar Łukasz Nowak

erp5_web_monitoring_ui_test: Simulate backend in ERP5

Thanks to not starting backend separately, the test became much simpler
and shall be easier to run and check.
parent ce119f3f
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>MonitorBackend_getBaseUrl</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
setHeader = context.REQUEST.response.setHeader
setHeader("Access-Control-Allow-Origin", "*")
setHeader("Access-Control-Allow-Methods", "HEAD, OPTIONS, GET, POST")
setHeader("Access-Control-Allow-Headers", "Overwrite, Destination, Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control, Authorization")
value = container.MonitorBackend_simulatorMapping(path)
if value is not None:
return value
else:
return 'OK'
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>path</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>MonitorBackend_simulator</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
base = context.portal_tests.web_monitoring_ui_zuite.MonitorBackend_getBaseUrl()
# normalize
path = path.strip('/')
# normalize share
path = path.replace('share/', '')
value = {
'rootInstance/public/feeds': """<?xml version="1.0" encoding="UTF-8"?>
<!-- OPML generated by SlapOS -->
<opml version="1.1">
<head>
<title>TEST Hosting Subscription</title>
<dateCreated>Fri, 17 Jan 2020 12:16:59 +0000</dateCreated>
<dateModified>Fri, 17 Jan 2020 12:16:59 +0000</dateModified>
</head>
<body>
<outline text="Monitoring RSS Feed list">
<outline text="rootInstance" title="rootInstance" type="rss" version="RSS" htmlUrl="%(base)s/rootInstance/public/feed" xmlUrl="%(base)s/rootInstance/public/feed" url="%(base)s/rootInstance/share/private/" />
<outline text="subInstance-1" title="subInstance-1" type="rss" version="RSS" htmlUrl="%(base)s/subInstance-1/public/feed" xmlUrl="%(base)s/subInstance-1/public/feed" url="%(base)s/subInstance-1/share/private/" />
<outline text="subInstance-2" title="subInstance-2" type="rss" version="RSS" htmlUrl="%(base)s/subInstance-2/public/feed" xmlUrl="%(base)s/subInstance-2/public/feed" url="%(base)s/subInstance-2/share/private/" /> </outline>
</body>
</opml>""",
'rootInstance/public/feed': """<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>rootInstance</title>
<link>%(base)s/rootInstance/public/feed</link>
<description>TEST Hosting Subscription</description>
<lastBuildDate>Fri, 17 Jan 2020 12:16:59 +0000</lastBuildDate>
<docs>%(base)s/gc//blogs.law.harvard.edu/tech/rss</docs>
<item>
<title>test_promise_3</title>
<link>%(base)s/rootInstance/share/private/</link>
<description>description of test_promise_3</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url="%(base)s/rootInstance/share/public/">test_promise_3</source>
</item>
<item>
<title>test_promise_0</title>
<link>%(base)s/rootInstance/share/private/</link>
<description>description of test_promise_0</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url="%(base)s/rootInstance/share/public/">test_promise_0</source>
</item>
<item>
<title>test_promise_2</title>
<link>%(base)s/rootInstance/share/private/</link>
<description>description of test_promise_2</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url="%(base)s/rootInstance/share/public/">test_promise_2</source>
</item>
<item>
<title>test_promise_1</title>
<link>%(base)s/rootInstance/share/private/</link>
<description>description of test_promise_1</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url="%(base)s/rootInstance/share/public/">test_promise_1</source>
</item>
<item>
<title>test_promise_4</title>
<link>%(base)s/rootInstance/share/private/</link>
<description>description of test_promise_4</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url="%(base)s/rootInstance/share/public/">test_promise_4</source>
</item>
</channel>
</rss>""",
'rootInstance/public/test_promise_0.json': """{"status": "OK", "change-time": 1579263419.246462, "instance": "rootInstance", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_0", "_links": {"monitor": {"href": "%(base)s/rootInstance/share/private/"}}, "message": "Test Promise ran with status OK", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'rootInstance/public/test_promise_1.json': """{"status": "OK", "change-time": 1579263419.246462, "instance": "rootInstance", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_1", "_links": {"monitor": {"href": "%(base)s/rootInstance/share/private/"}}, "message": "Test Promise ran with status OK", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'rootInstance/public/test_promise_2.json': """{"status": "OK", "change-time": 1579263419.246462, "instance": "rootInstance", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_2", "_links": {"monitor": {"href": "%(base)s/rootInstance/share/private/"}}, "message": "Test Promise ran with status OK", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'rootInstance/public/test_promise_3.json': """{"status": "OK", "change-time": 1579263419.246462, "instance": "rootInstance", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_3", "_links": {"monitor": {"href": "%(base)s/rootInstance/share/private/"}}, "message": "Test Promise ran with status OK", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'rootInstance/public/test_promise_4.json': """{"status": "OK", "change-time": 1579263419.246462, "instance": "rootInstance", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_4", "_links": {"monitor": {"href": "%(base)s/rootInstance/share/private/"}}, "message": "Test Promise ran with status OK", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'rootInstance/private/_document_list': """monitor.global""",
'monitor.global.json': """{"status": "OK", "_links": {"rss_url": {"href": "%(base)s/rootInstance/public/feed"}, "public_url": {"href": "%(base)s/rootInstance/share/public/"}, "private_url": {"href": "%(base)s/rootInstance/share/private/"}}, "state": {"warning": 0, "success": 3, "error": 0}, "_embedded": {"instance": {"partition": "slappart1", "ipv6": "2001:67c:1254:e:c4::c748", "computer": "slaprunner", "ipv4": "10.0.165.37", "software-release": "http://xxx.yyy.zz/asoftware/software.cfg", "software-type": "pull-backup"}}, "parameters": [{"key": "", "value": "some parameter", "title": "demo"}], "title": "rootInstance", "date": "2020-01-17 13:16:59", "type": "global", "hosting-title": "TEST Hosting Subscription", "data": {"process_state": "monitor_process_resource.status", "io_resource": "monitor_resource_io.data", "state": "monitor_state.data", "memory_resource": "monitor_resource_memory.data", "process_resource": "monitor_resource_process.data", "monitor_process_state": "monitor_resource.status"}}""",
'subInstance-1/public/feed': """<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>subInstance-1</title>
<link>%(base)s/subInstance-1/public/feed</link>
<description>TEST Hosting Subscription</description>
<lastBuildDate>Fri, 17 Jan 2020 12:16:59 +0000</lastBuildDate>
<docs>%(base)s/gc//blogs.law.harvard.edu/tech/rss</docs>
<item>
<title>test_promise_3</title>
<link>>%(base)s/subInstance-1/share/private/</link>
<description>description of test_promise_3</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url=">%(base)s/subInstance-1/share/public/">test_promise_3</source>
</item>
<item>
<title>test_promise_0</title>
<link>>%(base)s/subInstance-1/share/private/</link>
<description>description of test_promise_0</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url=">%(base)s/subInstance-1/share/public/">test_promise_0</source>
</item>
<item>
<title>test_promise_2</title>
<link>>%(base)s/subInstance-1/share/private/</link>
<description>description of test_promise_2</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url=">%(base)s/subInstance-1/share/public/">test_promise_2</source>
</item>
<item>
<title>test_promise_1</title>
<link>>%(base)s/subInstance-1/share/private/</link>
<description>description of test_promise_1</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url=">%(base)s/subInstance-1/share/public/">test_promise_1</source>
</item>
</channel>
</rss>""",
'subInstance-1/private/_document_list': """monitor.global""",
'subInstance-1/private/monitor.global.json': """{"status": "ERROR", "_links": {"rss_url": {"href": "%(base)s/subInstance-1/public/feed"}, "public_url": {"href": "%(base)s/subInstance-1/share/public/"}, "private_url": {"href": "%(base)s/subInstance-1/share/private/"}}, "state": {"warning": 0, "success": 3, "error": 0}, "_embedded": {"instance": {"partition": "slappart1", "ipv6": "2001:67c:1254:e:c4::c748", "computer": "slaprunner", "ipv4": "10.0.165.37", "software-release": "http://xxx.yyy.zz/asoftware/software.cfg", "software-type": "pull-backup"}}, "parameters": [{"key": "", "value": "some parameter", "title": "demo"}], "title": "subInstance-1", "date": "2020-01-17 13:16:59", "type": "global", "hosting-title": "TEST Hosting Subscription", "data": {"process_state": "monitor_process_resource.status", "io_resource": "monitor_resource_io.data", "state": "monitor_state.data", "memory_resource": "monitor_resource_memory.data", "process_resource": "monitor_resource_process.data", "monitor_process_state": "monitor_resource.status"}}""",
'subInstance-1/public/test_promise_0.json': """{"status": "ERROR", "change-time": 1579263419.247024, "instance": "subInstance-1", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_0", "_links": {"monitor": {"href": "%(base)s/subInstance-1/share/private/"}}, "message": "Test Promise ran with status ERROR", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'subInstance-1/public/test_promise_1.json': """{"status": "ERROR", "change-time": 1579263419.247024, "instance": "subInstance-1", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_1", "_links": {"monitor": {"href": "%(base)s/subInstance-1/share/private/"}}, "message": "Test Promise ran with status ERROR", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'subInstance-1/public/test_promise_2.json': """{"status": "ERROR", "change-time": 1579263419.247024, "instance": "subInstance-1", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_2", "_links": {"monitor": {"href": "%(base)s/subInstance-1/share/private/"}}, "message": "Test Promise ran with status ERROR", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'subInstance-1/public/test_promise_3.json': """{"status": "ERROR", "change-time": 1579263419.247024, "instance": "subInstance-1", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_3", "_links": {"monitor": {"href": "%(base)s/subInstance-1/share/private/"}}, "message": "Test Promise ran with status ERROR", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'subInstance-2/public/feed': """<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>subInstance-2</title>
<link>%(base)s/subInstance-2/public/feed</link>
<description>TEST Hosting Subscription</description>
<lastBuildDate>Fri, 17 Jan 2020 12:16:59 +0000</lastBuildDate>
<docs>%(base)s/gc//blogs.law.harvard.edu/tech/rss</docs>
<item>
<title>test_promise_5</title>
<link>%(base)s/subInstance-2/share/private/</link>
<description>description of test_promise_5</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url="%(base)s/subInstance-2/share/public/">test_promise_5</source>
</item>
<item>
<title>test_promise_3</title>
<link>%(base)s/subInstance-2/share/private/</link>
<description>description of test_promise_3</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url="%(base)s/subInstance-2/share/public/">test_promise_3</source>
</item>
<item>
<title>test_promise_6</title>
<link>%(base)s/subInstance-2/share/private/</link>
<description>description of test_promise_6</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url="%(base)s/subInstance-2/share/public/">test_promise_6</source>
</item>
<item>
<title>test_promise_0</title>
<link>%(base)s/subInstance-2/share/private/</link>
<description>description of test_promise_0</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url="%(base)s/subInstance-2/share/public/">test_promise_0</source>
</item>
<item>
<title>test_promise_2</title>
<link>%(base)s/subInstance-2/share/private/</link>
<description>description of test_promise_2</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url="%(base)s/subInstance-2/share/public/">test_promise_2</source>
</item>
<item>
<title>test_promise_1</title>
<link>%(base)s/subInstance-2/share/private/</link>
<description>description of test_promise_1</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url="%(base)s/subInstance-2/share/public/">test_promise_1</source>
</item>
<item>
<title>test_promise_4</title>
<link>%(base)s/subInstance-2/share/private/</link>
<description>description of test_promise_4</description>
<category>OK</category>
<comments />
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l1579263419==</guid>
<pubDate>Fri, 17 Jan 2020 12:16:59 +0000</pubDate>
<source url="%(base)s/subInstance-2/share/public/">test_promise_4</source>
</item>
</channel>
</rss>""",
'subInstance-2/public/test_promise_0.json': """{"status": "OK", "change-time": 1579263419.247408, "instance": "subInstance-2", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_0", "_links": {"monitor": {"href": "%(base)s/subInstance-2/share/private/"}}, "message": "Test Promise ran with status OK", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'subInstance-2/public/test_promise_1.json': """{"status": "OK", "change-time": 1579263419.247408, "instance": "subInstance-2", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_1", "_links": {"monitor": {"href": "%(base)s/subInstance-2/share/private/"}}, "message": "Test Promise ran with status OK", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'subInstance-2/public/test_promise_2.json': """{"status": "OK", "change-time": 1579263419.247408, "instance": "subInstance-2", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_2", "_links": {"monitor": {"href": "%(base)s/subInstance-2/share/private/"}}, "message": "Test Promise ran with status OK", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'subInstance-2/public/test_promise_3.json': """{"status": "OK", "change-time": 1579263419.247408, "instance": "subInstance-2", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_3", "_links": {"monitor": {"href": "%(base)s/subInstance-2/share/private/"}}, "message": "Test Promise ran with status OK", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'subInstance-2/public/test_promise_4.json': """{"status": "OK", "change-time": 1579263419.247408, "instance": "subInstance-2", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_4", "_links": {"monitor": {"href": "%(base)s/subInstance-2/share/private/"}}, "message": "Test Promise ran with status OK", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'subInstance-2/public/test_promise_5.json': """{"status": "OK", "change-time": 1579263419.247408, "instance": "subInstance-2", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_5", "_links": {"monitor": {"href": "%(base)s/subInstance-2/share/private/"}}, "message": "Test Promise ran with status OK", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'subInstance-2/public/test_promise_6.json': """{"status": "OK", "change-time": 1579263419.247408, "instance": "subInstance-2", "hosting_subscription": "TEST Hosting Subscription", "title": "test_promise_6", "_links": {"monitor": {"href": "%(base)s/subInstance-2/share/private/"}}, "message": "Test Promise ran with status OK", "start-date": "2020-01-17 13:16:59", "type": "status"}""",
'subInstance-2/private/_document_list': """monitor.global""",
'subInstance-2/private/monitor.global.json': """{"status": "OK", "_links": {"rss_url": {"href": "%(base)s/subInstance-2/public/feed"}, "public_url": {"href": "%(base)s/subInstance-2/share/public/"}, "private_url": {"href": "%(base)s/subInstance-2/share/private/"}}, "state": {"warning": 0, "success": 3, "error": 0}, "_embedded": {"instance": {"partition": "slappart1", "ipv6": "2001:67c:1254:e:c4::c748", "computer": "slaprunner", "ipv4": "10.0.165.37", "software-release": "http://xxx.yyy.zz/asoftware/software.cfg", "software-type": "pull-backup"}}, "parameters": [{"key": "", "value": "some parameter", "title": "demo"}], "title": "subInstance-2", "date": "2020-01-17 13:16:59", "type": "global", "hosting-title": "TEST Hosting Subscription", "data": {"process_state": "monitor_process_resource.status", "io_resource": "monitor_resource_io.data", "state": "monitor_state.data", "memory_resource": "monitor_resource_memory.data", "process_resource": "monitor_resource_process.data", "monitor_process_state": "monitor_resource.status"}}""",
}.get(path, None)
if 'json' in path:
context.REQUEST.response.setHeader('Content-Type', 'application/json')
if value is None:
value = '{}'
if value is not None:
return value % {'base': base}
else:
script.log(path)
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>path</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>MonitorBackend_simulatorMapping</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -10,6 +10,11 @@ ...@@ -10,6 +10,11 @@
<tr><td rowspan="1" colspan="3">Test SlapOS Monitoring UI</td></tr> <tr><td rowspan="1" colspan="3">Test SlapOS Monitoring UI</td></tr>
</thead><tbody> </thead><tbody>
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" /> <tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
<tr>
<td>store</td>
<td tal:content="here/portal_tests/web_monitoring_ui_zuite/MonitorBackend_getBaseUrl">http://example.com/erp5</td>
<td>monitor_simulator_url</td>
</tr>
<!-- Clean Up --> <!-- Clean Up -->
<tr> <tr>
<td>open</td> <td>open</td>
...@@ -89,7 +94,7 @@ ...@@ -89,7 +94,7 @@
</tr> </tr>
<tr> <tr>
<td>store</td> <td>store</td>
<td>http://localhost:5378/rootInstance/public/feeds</td> <td>${monitor_simulator_url}/rootInstance/public/feeds</td>
<td>opml_url</td> <td>opml_url</td>
</tr> </tr>
<tr> <tr>
......
...@@ -27,285 +27,19 @@ ...@@ -27,285 +27,19 @@
import unittest import unittest
from Products.ERP5Type.tests.ERP5TypeFunctionalTestCase import ERP5TypeFunctionalTestCase from Products.ERP5Type.tests.ERP5TypeFunctionalTestCase import ERP5TypeFunctionalTestCase
from SimpleHTTPServer import SimpleHTTPRequestHandler
from threading import Thread
from datetime import datetime
import SocketServer class TestFunctionalOfficejsMonitoring(ERP5TypeFunctionalTestCase):
import tempfile
import shutil
import time
import os
import json
class CustomHTTPRequestHandler(SimpleHTTPRequestHandler):
def end_headers(self):
self.send_my_headers()
SimpleHTTPRequestHandler.end_headers(self)
def send_respond(self, code=200, content_type='text/html'):
self.send_response(code)
self.send_header("Content-type", content_type)
self.end_headers()
def send_my_headers(self):
self.send_header("Access-Control-Allow-Origin", "*")
self.send_header("Access-Control-Allow-Methods", "HEAD, OPTIONS, GET, POST")
self.send_header("Access-Control-Allow-Headers", "Overwrite, Destination, Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control, Authorization")
def do_GET(self):
SimpleHTTPRequestHandler.do_GET(self)
def do_OPTIONS(self):
self.send_respond(200)
def do_HEAD(self):
self.send_respond()
class TestZeleniumCore(ERP5TypeFunctionalTestCase):
foreground = 0 foreground = 0
run_only = "web_monitoring_ui_zuite" run_only = "web_monitoring_ui_zuite"
base_url = 'http://localhost:5378'
instance_list = []
httpd = None
httpd_is_alive = False
root_title = "TEST Hosting Subscription"
def start_httpd_server(self, root_folder):
self.httpd = SocketServer.TCPServer(('localhost', 5378), CustomHTTPRequestHandler)
self.httpd.timeout = 2
os.chdir(root_folder)
#self.httpd.serve_forever()
while self.httpd_is_alive:
self.httpd.handle_request()
self.httpd = None
def afterSetUp(self):
ERP5TypeFunctionalTestCase.afterSetUp(self)
self.http_root_dir = tempfile.mkdtemp()
print "Serving files on http from %r" % self.http_root_dir
self.generateMonitoringInstanceTree()
self.httpd_is_alive = True
thread = Thread(target=self.start_httpd_server, args=(self.http_root_dir,))
thread.daemon = True
thread.start()
def beforeTearDown(self):
self.httpd_is_alive = False
# Wait for httpd server stop
time.sleep(3)
if os.path.exists(self.http_root_dir):
shutil.rmtree(self.http_root_dir)
ERP5TypeFunctionalTestCase.beforeTearDown(self)
def getBusinessTemplateList(self): def getBusinessTemplateList(self):
return ( return (
'erp5_ui_test',
'erp5_web_monitoring', 'erp5_web_monitoring',
'erp5_web_monitoring_ui_test',
'erp5_ui_test_core', 'erp5_ui_test_core',
) )
def generateInstanceDirectory(self, name):
root_dir = os.path.join(self.http_root_dir, name)
public_http_dir = os.path.join(root_dir, 'public')
private_http_dir = os.path.join(root_dir, 'private')
webdav_http_dir = os.path.join(root_dir, 'share')
os.mkdir(root_dir)
os.mkdir(public_http_dir)
os.mkdir(private_http_dir)
os.mkdir(webdav_http_dir)
webdav_public_dir = os.path.join(webdav_http_dir, 'public')
webdav_private_dir = os.path.join(webdav_http_dir, 'private')
os.symlink(public_http_dir, webdav_public_dir)
os.symlink(private_http_dir, webdav_private_dir)
instance = dict(
title=name,
public_dir=public_http_dir,
private_dir=private_http_dir,
url=self.base_url + '/' + name
)
self.instance_list.append(instance)
return instance
def generatePromiseResult(self, instance, status='OK', amount=1):
now_time = time.time()
start_date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
for i in range(0, amount):
title = 'test_promise_%s' % i
result_dict = {
"status": status,
"change-time": now_time,
"hosting_subscription": self.root_title,
"title": title,
"start-date": start_date,
"instance": instance['title'],
"_links": {
"monitor": {
"href": "%s/share/private/" % instance['url']
}
},
"message": "Test Promise ran with status %s" % status,
"type": "status"
}
with open(os.path.join(instance['public_dir'], '%s.json' % title), 'w') as f:
f.write(json.dumps(result_dict))
def generateOPMLFile(self, instance, sub_instance_list=[]):
creation_date = datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S +0000")
opml_content = """<?xml version="1.0" encoding="UTF-8"?>
<!-- OPML generated by SlapOS -->
<opml version="1.1">
<head>
<title>%(root_title)s</title>
<dateCreated>%(creation_date)s</dateCreated>
<dateModified>%(creation_date)s</dateModified>
</head>
<body>
<outline text="Monitoring RSS Feed list">""" % {
"root_title": self.root_title,
"creation_date": creation_date
}
opml_content += '\n<outline text="%(title)s" title="%(title)s" type="rss" version="RSS" htmlUrl="%(html_url)s" xmlUrl="%(html_url)s" url="%(global_url)s" />' % {
"title": instance['title'],
"html_url": '%s/public/feed' % instance['url'],
"global_url": "%s/share/private/" % instance['url'],
}
for sub_instance in sub_instance_list:
opml_content += '\n<outline text="%(title)s" title="%(title)s" type="rss" version="RSS" htmlUrl="%(html_url)s" xmlUrl="%(html_url)s" url="%(global_url)s" />' % {
"title": sub_instance['title'],
"html_url": '%s/public/feed' % sub_instance['url'],
"global_url": "%s/share/private/" % sub_instance['url'],
}
opml_content += """ </outline>
</body>
</opml>"""
with open(os.path.join(instance['public_dir'], 'feeds'), 'w') as f:
f.write(opml_content)
def generateInstanceRssFeed(self, instance):
promise_list = [name.rstrip('.json')
for name in os.listdir(instance['public_dir']) if name.endswith('.json')]
rss_content = """<rss version="2.0">
<channel>
<title>%(instance)s</title>
<link>%(link)s</link>
<description>%(description)s</description>
<lastBuildDate>%(date)s</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>""" % {
"description": self.root_title,
"link": '%s/public/feed' % instance['url'],
"instance": instance['title'],
"date": datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S +0000")
}
for promise in promise_list:
item = """<item>
<title>%(title)s</title>
<link>
%(base_url)s/share/private/
</link>
<description>%(description)s</description>
<category>%(status)s</category>
<comments/>
<guid isPermaLink="false">VU5LTk9XTiwgc2xhcHJ1bm5l%(id)s==</guid>
<pubDate>%(date)s</pubDate>
<source url="%(base_url)s/share/public/">%(title)s</source>
</item>""" % {
"base_url": instance['url'],
"title": promise,
"status": "OK",
"description": "description of %s" % promise,
"id": int(time.time()),
"date": datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S +0000")
}
rss_content += item
rss_content += """</channel></rss>"""
with open(os.path.join(instance['public_dir'], 'feed'), 'w') as f:
f.write(rss_content.replace('\n', ''))
def generateMonitoringStatusFile(self, instance, status="OK"):
monitor_dict = {
"status": status,
"state": {
"warning": 0,
"success": 3,
"error": 0
},
"title": instance['title'],
"date": datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
"data": {
"process_state": "monitor_process_resource.status",
"io_resource": "monitor_resource_io.data",
"state": "monitor_state.data",
"memory_resource": "monitor_resource_memory.data",
"process_resource": "monitor_resource_process.data",
"monitor_process_state": "monitor_resource.status"
},
"hosting-title": self.root_title,
"type": "global",
"_embedded": {
"instance": {
"partition": "slappart1",
"ipv6": "2001:67c:1254:e:c4::c748",
"computer": "slaprunner",
"ipv4": "10.0.165.37",
"software-release": "http://xxx.yyy.zz/asoftware/software.cfg",
"software-type": "pull-backup"
}
},
"parameters": [{"title": "demo", "value": "some parameter", "key": ""}],
"_links": {
"rss_url": {
"href": "%s/public/feed" % instance['url']
},
"public_url": {
"href": "%s/share/public/" % instance['url']
},
"private_url": {
"href": "%s/share/private/" % instance['url']
}
}
}
with open(os.path.join(instance['private_dir'], 'monitor.global.json'), 'w') as f:
f.write(json.dumps(monitor_dict))
with open(os.path.join(instance['private_dir'], '_document_list'), 'w') as f:
f.write("monitor.global")
def generateMonitoringInstanceTree(self):
# root instance
root_instance = self.generateInstanceDirectory("rootInstance")
self.generatePromiseResult(root_instance, status='OK', amount=5)
self.generateInstanceRssFeed(root_instance)
self.generateMonitoringStatusFile(root_instance, status='OK')
# sub instance1
sub_instance1 = self.generateInstanceDirectory("subInstance-1")
self.generatePromiseResult(sub_instance1, status='ERROR', amount=4)
self.generateInstanceRssFeed(sub_instance1)
self.generateMonitoringStatusFile(sub_instance1, status='ERROR')
# sub instance2
sub_instance2 = self.generateInstanceDirectory("subInstance-2")
self.generatePromiseResult(sub_instance2, status='OK', amount=7)
self.generateInstanceRssFeed(sub_instance2)
self.generateMonitoringStatusFile(sub_instance2, status='OK')
self.generateOPMLFile(root_instance, [sub_instance1, sub_instance2])
def test_suite(): def test_suite():
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestZeleniumCore)) suite.addTest(unittest.makeSuite(TestFunctionalOfficejsMonitoring))
return suite return suite
\ No newline at end of file
...@@ -45,9 +45,7 @@ ...@@ -45,9 +45,7 @@
<item> <item>
<key> <string>text_content_warning_message</string> </key> <key> <string>text_content_warning_message</string> </key>
<value> <value>
<tuple> <tuple/>
<string>W:161, 2: Dangerous default value [] as argument (dangerous-default-value)</string>
</tuple>
</value> </value>
</item> </item>
<item> <item>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment