[X2Go-Commits] [x2gobroker] 01/03: Add tests for broker agent queries.

git-admin at x2go.org git-admin at x2go.org
Thu Nov 6 05:59:33 CET 2014


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository x2gobroker.

commit ebf77180885f59b9febd46afe4c4eb39a3edd894
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date:   Thu Nov 6 05:54:59 2014 +0100

    Add tests for broker agent queries.
---
 debian/changelog                      |    1 +
 x2gobroker/tests/test_broker_agent.py |  255 +++++++++++++++++++++++++++++++++
 2 files changed, 256 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 37fe2a8..2c1aeee 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -189,6 +189,7 @@ x2gobroker (0.0.3.0-0x2go1) UNRELEASED; urgency=low
       for authentication requests.
     - Get several issues around select_session fixed via tests in the
       broker's backend base.py.
+    - Add tests for broker agent queries.
   * debian/control:
     + Provide separate bin:package for SSH brokerage: x2gobroker-ssh.
     + Replace LDAP support with session brokerage support in LONG_DESCRIPTION.
diff --git a/x2gobroker/tests/test_broker_agent.py b/x2gobroker/tests/test_broker_agent.py
new file mode 100644
index 0000000..6eefa02
--- /dev/null
+++ b/x2gobroker/tests/test_broker_agent.py
@@ -0,0 +1,255 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2012-2014 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
+#
+# X2Go Session Broker is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# X2Go Session Broker is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+import unittest
+import tempfile
+import copy
+
+# Python X2GoBroker modules
+import x2gobroker.brokers.inifile_broker as inifile
+import x2gobroker.defaults
+
+class TestX2GoBrokerAgent(unittest.TestCase):
+
+    # TEST INTERPRETATION OF REPLIES FROM (FAKED) BROKER AGENT
+
+    def test_broker_agent_replies(self):
+        _save_icmp_ping = x2gobroker.agent.icmp_ping
+        _save_local_broker_agent_call = x2gobroker.agent._call_local_broker_agent
+        _save_remote_broker_agent_call = x2gobroker.agent._call_remote_broker_agent
+
+        def _call_testsuite_broker_agent(username, task, cmdline_args=[], remote_agent=None):
+
+            if task == 'listsessions':
+                list_sessions = []
+                if username == 'foo1R':
+                    list_sessions = ['30342|foo1R-50-1414759661_stDMATE_dp24|50|host1|R|2014-10-31T13:47:41|c02c7bbe58677a2726f7e456cb398ae4|127.0.0.1|30001|30002|2014-10-31T13:47:43|foo1R|34|30003|-1|-1',
+                    ]
+                elif username == 'foo1S':
+                    list_sessions = ['30342|foo1S-50-1414759661_stDMATE_dp24|50|host1|S|2014-10-31T13:47:41|c02c7bbe58677a2726f7e456cb398ae4|127.0.0.1|30001|30002|2014-10-31T13:47:43|foo1S|34|30003|-1|-1',
+                    ]
+                elif username == 'foo1N':
+                    list_sessions = ['30342|foo1N-50-1414759661_stDMATE_dp24|50|host2|S|2014-10-31T13:47:41|c02c7bbe58677a2726f7e456cb398ae4|127.0.0.1|30001|30002|2014-10-31T13:47:43|foo1N|34|30003|-1|-1',
+                    ]
+                elif username == 'foo2RS':
+                    # the session on host2 is older than the session on host1!!!
+                    list_sessions = ['30342|foo2RS-50-1414759789_stDMATE_dp24|50|host2|S|2014-10-31T13:49:51|c02c7bbe58677a2726f7e456cb398ae4|127.0.0.1|30001|30002|2014-10-31T13:49:51|foo2RS|89|30003|-1|-1',
+                                     '23412|foo2RS-50-1414759661_stDMATE_dp24|50|host1|R|2014-10-31T13:47:43|fasd7asd58677a2726f7e456cb398ae4|127.0.0.1|30001|30002|2014-10-31T13:47:43|foo2RS|34|30003|-1|-1',
+                    ]
+                elif username == 'foo3RS':
+                    # the session on host2 is older than the session on host1!!!
+                    list_sessions = ['30342|foo3RS-50-1414759789_stDMATE_dp24|50|host2|S|2014-10-31T13:49:51|c02c7bbe58677a2726f7e456cb398ae4|127.0.0.1|30001|30002|2014-10-31T13:49:51|foo3RS|89|30003|-1|-1',
+                                     '23412|foo3RS-50-1414759661_stDMATE_dp24|50|host1|R|2014-10-31T13:47:43|fasd7asd58677a2726f7e456cb398ae4|127.0.0.1|30001|30002|2014-10-31T13:47:43|foo3RS|34|30003|-1|-1',
+                    ]
+                return True, list_sessions
+
+            elif task == 'suspendsession':
+                return True
+
+            return False, []
+
+        def _fake_icmp_ping(hostname):
+            return True
+
+        x2gobroker.agent._call_local_broker_agent = _call_testsuite_broker_agent
+        x2gobroker.agent._call_remote_broker_agent = _call_testsuite_broker_agent
+        x2gobroker.agent.icmp_ping = _fake_icmp_ping
+
+        _session_profiles = """
+[DEFAULT]
+command = MATE
+user = foo
+broker-agent-query-mode = NONE
+
+[testprofile1]
+name = testprofile1
+host = host1
+broker-agent-query-mode = LOCAL
+
+[testprofile2]
+name = testprofile2
+host = host1, host2, host3, host4
+broker-agent-query-mode = SSH
+
+[testprofile3]
+name = testprofile3
+host = host1.mydomain, host2.mydomain, host3.mydomain, host4.mydomain, host5.mydomain, host6.mydomain
+broker-agent-query-mode = LOCAL
+
+[testprofile4]
+name = testprofile4
+host = host1.mydomain, host2.yourdomain
+
+[testprofile5]
+name = testprofile5
+host = host1.mydomain (10.0.2.4), host2.mydomain (10.0.2.5)
+broker-agent-query-mode = SSH
+
+[testprofile6]
+name = testprofile6
+host = host1.mydomain (10.0.2.4), host2.mydomain (10.0.2.5)
+sshport = 23467
+broker-agent-query-mode = SSH
+
+[testprofile7]
+name = testprofile7
+host = docker-vm-1 (docker-server:22001), docker-vm-2 (docker-server:22002)
+broker-agent-query-mode = SSH
+
+[testprofile8]
+name = testprofile8
+host = docker-vm-0 (localhost), docker-vm-1 (localhost:22001), docker-vm-2 (localhost:22002)
+sshport = 22000
+
+"""
+        tf = tempfile.NamedTemporaryFile()
+        print >> tf, _session_profiles
+        tf.seek(0)
+        inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
+
+        # test with 'testprofile1'
+
+        # the faked broker agent should report a running session
+        _list1 = inifile_backend.list_profiles(username='foo1R')
+        _profile1 = _list1['testprofile1']
+        self.assertTrue( ( _profile1['host'] == ['host1'] ) )
+        self.assertTrue( ( _profile1.has_key('status') and _profile1['status'] == 'R' ) )
+        # here will be a short pause, as we will try to suspend the faked X2Go Session
+        _session1 = inifile_backend.select_session('testprofile1', username='foo1R')
+        # the session broker has detected the running session on host 1 and changed its status to "S"
+        self.assertEqual ( _session1, {'port': 22, 'server': 'host1', 'session_info': '30342|foo1R-50-1414759661_stDMATE_dp24|50|host1|S|2014-10-31T13:47:41|c02c7bbe58677a2726f7e456cb398ae4|127.0.0.1|30001|30002|2014-10-31T13:47:43|foo1R|34|30003|-1|-1', } )
+
+        # the faked broker agent should report a suspended session
+        _list1 = inifile_backend.list_profiles(username='foo1S')
+        _profile1 = _list1['testprofile1']
+        self.assertTrue( ( _profile1['host'] == ['host1'] ) )
+        self.assertTrue( ( _profile1.has_key('status') and _profile1['status'] == 'S' ) )
+        _session1 = inifile_backend.select_session('testprofile1')
+        self.assertEqual ( _session1, {'port': 22, 'server': 'host1'} )
+
+        # the faked broker agent should report a suspended session for host2, nothing for host1
+        _list1 = inifile_backend.list_profiles(username='foo1N')
+        _profile1 = _list1['testprofile1']
+        self.assertTrue( ( _profile1['host'] == ['host1'] ) )
+        self.assertFalse( ( _profile1.has_key('status') ) )
+        _session1 = inifile_backend.select_session('testprofile1')
+        self.assertEqual ( _session1, {'port': 22, 'server': 'host1'} )
+
+        # test "testprofile2", always resume suspended sessions first
+
+        # the faked broker agent should report a suspended session for host1, a running session for host2
+        # we resume host1 (the broker attempts resumption of suspended sessions, then the take-over of running sessions
+        _list2 = inifile_backend.list_profiles(username='foo2RS')
+        _profile2 = _list2['testprofile2']
+        _profile2['host'].sort()
+        self.assertTrue( ( _profile2['host'] == ['host2'] ) )
+        self.assertTrue( ( _profile2.has_key('status') and _profile2['status'] == 'S' ) )
+        _session2 = inifile_backend.select_session('testprofile2', 'foo2RS')
+        self.assertEqual ( _session2, {'port': 22, 'server': 'host2', 'session_info': '30342|foo2RS-50-1414759789_stDMATE_dp24|50|host2|S|2014-10-31T13:49:51|c02c7bbe58677a2726f7e456cb398ae4|127.0.0.1|30001|30002|2014-10-31T13:49:51|foo2RS|89|30003|-1|-1', } )
+
+        # test "testprofile3", given host names with a subdomain, but subdomains not in listsessions output
+
+        # the faked broker agent should report a suspended session for host1, a running session for host2
+        # we resume host1 (the broker attempts resumption of suspended sessions, then the take-over of running sessions
+        _list3 = inifile_backend.list_profiles(username='foo3RS')
+        _profile3 = _list3['testprofile3']
+        _profile3['host'].sort()
+        self.assertTrue( ( _profile3['host'] == ['host2'] ) )
+        self.assertTrue( ( _profile3.has_key('status') and _profile3['status'] == 'S' ) )
+        _session3 = inifile_backend.select_session('testprofile3', 'foo3RS')
+        self.assertEqual ( _session3, {'port': 22, 'server': 'host2.mydomain', 'session_info': '30342|foo3RS-50-1414759789_stDMATE_dp24|50|host2|S|2014-10-31T13:49:51|c02c7bbe58677a2726f7e456cb398ae4|127.0.0.1|30001|30002|2014-10-31T13:49:51|foo3RS|89|30003|-1|-1', } )
+        _session3 = inifile_backend.select_session('testprofile3', 'foo3RS')
+
+#        # test "testprofile4"
+#        _profile4 = inifile_backend.get_profile('testprofile4')
+#        _profile4['host'].sort()
+#        self.assertTrue( ( _profile4['host'] == ['host1.mydomain', 'host2.yourdomain'] ) )
+#        for key in _profile4.keys():
+#            self.assertFalse( (key.startswith('host') and key != 'host' ) )
+#        _session4 = inifile_backend.select_session('testprofile4')
+#        self.assertTrue ( _session4['port'] == 22 )
+#        self.assertTrue ( _session4['server'] in ('host1.mydomain', 'host2.yourdomain') )
+
+        # test "testprofile5", test if canonical hostnames and real hostnames differ
+
+        _list5 = inifile_backend.list_profiles(username='foo5N')
+        _profile5 = _list5['testprofile5']
+        _profile5['host'].sort()
+        self.assertTrue( _profile5['host'][0] in ('host1.mydomain', 'host2.mydomain') )
+        self.assertTrue( not _profile5.has_key('status') )
+        _remoteagent5 = inifile_backend.get_remote_agent('testprofile5')
+        self.assertTrue( _remoteagent5 == {u'hostname': '10.0.2.4', u'port': 22} or _remoteagent5 == {u'hostname': '10.0.2.5', u'port': 22} )
+        _session5 = inifile_backend.select_session('testprofile5', 'foo5N')
+        self.assertTrue( _session5 == {'port': 22, 'server': '10.0.2.4', } or _session5 == {'port': 22, 'server': '10.0.2.5', } )
+
+        # test "testprofile6", test if canonical hostnames and real hostnames differ and the default
+        # SSH port has been adapted
+
+        _list6 = inifile_backend.list_profiles(username='foo6N')
+        _profile6 = _list6['testprofile6']
+        _profile6['host'].sort()
+        self.assertTrue( _profile6['host'][0] in ('host1.mydomain', 'host2.mydomain') )
+        self.assertTrue( not _profile6.has_key('status') )
+        _remoteagent6 = inifile_backend.get_remote_agent('testprofile6')
+        self.assertTrue( _remoteagent6 == {u'hostname': '10.0.2.4', u'port': 23467} or _remoteagent6 == {u'hostname': '10.0.2.5', u'port': 23467} )
+        _session6 = inifile_backend.select_session('testprofile6', 'foo6N')
+        self.assertTrue( _session6 == {'port': 23467, 'server': '10.0.2.4', } or _session6 == {'port': 23467, 'server': '10.0.2.5', } )
+
+        _list7 = inifile_backend.list_profiles(username='foo7N')
+        _profile7 = _list7['testprofile7']
+        _profile7['host'].sort()
+        self.assertTrue( _profile7['host'][0] in ('docker-vm-1', 'docker-vm-2') )
+        self.assertTrue( not _profile7.has_key('status') )
+        _remoteagent7 = inifile_backend.get_remote_agent('testprofile7')
+        self.assertTrue( _remoteagent7 == {u'hostname': 'docker-server', u'port': 22001} or _remoteagent7 == {u'hostname': 'docker-server', u'port': 22002} )
+        _session7 = inifile_backend.select_session('testprofile7', 'foo7N')
+        self.assertTrue( _session7 == {'port': 22001, 'server': 'docker-server', } or _session7 == {'port': 22001, 'server': 'docker-server', } )
+
+#        # test "testprofile8"
+#        _profile8 = inifile_backend.get_profile('testprofile8')
+#        _profile8['host'].sort()
+#        self.assertTrue( ( _profile8['host'] == ['docker-vm-0', 'docker-vm-1', 'docker-vm-2'] ) )
+#        self.assertTrue( _profile8.has_key('host=docker-vm-0') )
+#        self.assertTrue( _profile8.has_key('host=docker-vm-1') )
+#        self.assertTrue( _profile8.has_key('host=docker-vm-2') )
+#        self.assertTrue( _profile8['host=docker-vm-0'] == 'localhost' )
+#        self.assertTrue( _profile8['host=docker-vm-1'] == 'localhost' )
+#        self.assertTrue( _profile8['host=docker-vm-2'] == 'localhost' )
+#        self.assertTrue( _profile8['sshport'] == 22000 )
+#        self.assertFalse( _profile8.has_key('sshport=docker-vm-0') )
+#        self.assertTrue( _profile8['sshport=docker-vm-1'] == 22001 )
+#        self.assertTrue( _profile8['sshport=docker-vm-2'] == 22002 )
+#        i = 0
+#        while i < 10:
+#            _session8 = inifile_backend.select_session('testprofile8', username='foo')
+#            self.assertTrue ( _session8['port'] in (22000, 22001, 22002) )
+#            self.assertTrue ( _session8['server'] == 'localhost' )
+#            i += 1
+
+        x2gobroker.agent._call_local_broker_agent = _save_local_broker_agent_call
+        x2gobroker.agent._call_remote_broker_agent = _save_remote_broker_agent_call
+        x2gobroker.agent.icmp_ping = _save_icmp_ping
+
+
+def test_suite():
+    from unittest import TestSuite, makeSuite
+    suite = TestSuite()
+    suite.addTest(makeSuite(TestX2GoBrokerAgent))
+    return suite
+

--
Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/x2gobroker.git


More information about the x2go-commits mailing list