def test_try_30add_lonely_group(): #logging.debug('isol = %s' % xc.db.conn.isolation_level) #xc.db.conn.dump('sqlite_master') #xc.db.conn.dump('rosterinfo') # Expected: groups calls global collect collect = [] xc.session.post = make_rosterfunc( {'user1@domain1': { 'name': 'Ce De', 'groups': ['Lonely'] }}) xc.ejabberd_controller.execute = ctrl_collect assertEqual(sc.try_roster(async_=False), True) logging.info('collected = ' + str(collect)) assertEqual(collect, [ ['srg_create', 'Lonely', 'domain1', 'Lonely', 'Lonely', 'Lonely'], ['srg_get_members', 'Lonely', 'domain1'], ['srg_user_add', 'user1', 'domain1', 'Lonely', 'domain1'], ]) #xc.db.conn.dump('sqlite_master') xc.db.conn.dump('rosterinfo') xc.db.conn.dump('rostergroups') assert_grouplist('user1@domain1', 'Lonely') assert_groupinfo('Lonely@domain1', 'user1@domain1')
def test_try_34login_other_user_again(): global collect collect = [] xc.session.post = make_rosterfunc({ 'user1@domain1': { 'name': 'Ce De', 'groups': ['Family'], 'dummy': '1' }, 'user2@domain1': { 'name': 'De Be', 'groups': ['Family', 'Friends'] }, 'user3@domain1': { 'name': 'Xy Zzy', 'groups': ['Friends'] }, }) xc.ejabberd_controller.execute = ctrl_collect sc = sigcloud(xc, 'user2', 'domain1') assertEqual(sc.try_roster(async_=False), True) logging.info(collect) assertEqual(collect, []) xc.db.conn.dump('rosterinfo') xc.db.conn.dump('rostergroups') assert_grouplist('user1@domain1', 'Family\tLonely') assert_grouplist('user2@domain1', 'Family\tFriends') assert_grouplist('user3@domain1', None) assert_groupinfo('Lonely@domain1', 'user1@domain1') assert_groupinfo('Family@domain1', 'user1@domain1\tuser2@domain1') assert_groupinfo('Friends@domain1', 'user2@domain1\tuser3@domain1')
def test_try_40third_party_deletion(): global collect collect = [] xc.db.conn.dump('rosterinfo') xc.session.post = make_rosterfunc({ 'user2@domain1': { 'name': 'De Be', 'groups': ['Family', 'Friends'] }, 'user3@domain1': { 'name': 'Xy Zzy', 'groups': ['Friends'] }, }) xc.ejabberd_controller.execute = ctrl_collect sc = sigcloud(xc, 'user2', 'domain1') assertEqual(sc.try_roster(async_=False), True) logging.info(collect) assertEqual(collect, [['srg_user_del', 'user1', 'domain1', 'Family', 'domain1']]) xc.db.conn.dump('rosterinfo') xc.db.conn.dump('rostergroups') assert_grouplist( 'user1@domain1', 'Family\tLonely') # This is not touched by 3rd party deletion assert_grouplist('user2@domain1', 'Family\tFriends') assert_grouplist('user3@domain1', None) assert_groupinfo('Lonely@domain1', 'user1@domain1') assert_groupinfo('Family@domain1', 'user2@domain1') # Only this assert_groupinfo('Friends@domain1', 'user2@domain1\tuser3@domain1')
def test_20_token_success(): # ./generateTimeLimitedToken tuser tdomain 01234 3600 1000 sc = sigcloud(xc, 'tuser', 'tdomain', 'AMydsCzkh8-8vjcb9U2gqV/FZQAAEfg', now=utc(2000)) sc.verbose_cloud_request = sc_trap assertEqual(sc.auth(), True) assertEqual(0, sql1('''SELECT COUNT(*) FROM authcache WHERE jid = 'tuser@tdomain' ''')[0])
def assert_groupinfo(groupname, userlist): for row in xc.db.conn.execute( 'SELECT userlist FROM rostergroups WHERE groupname = ?', (groupname, )): assertEqual(userlist, row['userlist']) return assertEqual('groupname does not exist', groupname) # Fail on empty list
def test_20_token_success(): # ./generateTimeLimitedToken tuser tdomain 01234 3600 1000 sc = sigcloud(xc, 'tuser', 'tdomain', 'AMydsCzkh8-8vjcb9U2gqV/FZQAAEfg', now=2000) sc.verbose_cloud_request = sc_trap assertEqual(sc.auth(), True) assert 'tuser:tdomain' not in xc.cache_db
def test_try_35login_with_ignored_group(): global collect collect = [] xc.db.conn.dump('rosterinfo') xc.session.post = make_rosterfunc({ 'user1@domain1': { 'name': 'Ce De', 'groups': ['Family', 'Lonely', 'Hidden\u200b'] }, 'user2@domain1': { 'name': 'De Be', 'groups': ['Family', 'Friends'] }, 'user3@domain1': { 'name': 'Xy Zzy', 'groups': ['Friends'] }, }) xc.ejabberd_controller.execute = ctrl_collect sc = sigcloud(xc, 'user1', 'domain1') assertEqual(sc.try_roster(async_=False), True) logging.info(collect) xc.db.conn.dump('rosterinfo') xc.db.conn.dump('rostergroups') assertEqual( collect, [ # No add of Hidden ]) assert_grouplist('user1@domain1', 'Family\tLonely') assert_grouplist('user2@domain1', 'Family\tFriends') assert_grouplist('user3@domain1', None) assert_groupinfo('Lonely@domain1', 'user1@domain1') assert_groupinfo('Family@domain1', 'user1@domain1\tuser2@domain1') assert_groupinfo('Friends@domain1', 'user2@domain1\tuser3@domain1')
def test_try_41self_deletion(): global collect collect = [] xc.db.conn.dump('rosterinfo') xc.db.conn.dump('rostergroups') xc.session.post = make_rosterfunc({'user1@domain1': {'name': 'Ce De'}}) xc.ejabberd_controller.execute = ctrl_collect sc = sigcloud(xc, 'user1', 'domain1') assertEqual(sc.try_roster(async_=False), True) xc.db.conn.dump('rosterinfo') xc.db.conn.dump('rostergroups') logging.info(collect) assertEqual( collect, [ # The first is unnecessary but harmless (idempotent) and not easily avoidable ['srg_user_del', 'user1', 'domain1', 'Family', 'domain1'], ['srg_user_del', 'user1', 'domain1', 'Lonely', 'domain1'] ]) xc.db.conn.dump('rosterinfo') xc.db.conn.dump('rostergroups') assert_grouplist('user1@domain1', '') assert_grouplist('user2@domain1', 'Family\tFriends') assert_grouplist('user3@domain1', None) assert_groupinfo('Lonely@domain1', 'user1@domain1') assert_groupinfo('Family@domain1', 'user2@domain1') assert_groupinfo('Friends@domain1', 'user2@domain1\tuser3@domain1')
def test_try_20first_name(): # Expected: a single set vcard sc.username = '******' sc.domain = 'domain1' xc.session.post = make_rosterfunc({'user1@domain1': {'name': 'Ah Be'}}) xc.ejabberd_controller.execute = ctrl_setfn20 assertEqual(sc.try_roster(async_=False), True) assertEqual(xc.ejabberd_controller.execute, ctrl_end)
def test_input(self): self.stub_stdin('isuser:login:\n' + 'auth:log:dom:pass\n') tester = iter(prosody_io.read_request()) output = next(tester) assertEqual(output, ('isuser', 'login', '')) output = next(tester) assertEqual(output, ('auth', 'log', 'dom', 'pass')) self.assertRaises(StopIteration, next, tester)
def test_unutf8_invalid_illegal(): try: stderr = sys.stderr sys.stderr = io.StringIO() assertEqual(unutf8(b'Hall\x80chen', 'illegal'), u'illegal-utf8-sequence-Hallchen') finally: sys.stderr = stderr
def test_20_token_fail(): # ./generateTimeLimitedToken tuser tdomain 01234 3600 1000 sc = sigcloud(xc, 'tuser', 'tdomain', 'AMydsCzkh8-8vjcb9U2gqV/FZQAAEfg', now=utc(5000)) sc.verbose_cloud_request = sc_noauth global cloud_count cloud_count = 0 assertEqual(sc.auth(), False) assertEqual(cloud_count, 1)
def test_02_put(self): ns = self.mkns(put=[u'example.net', u'dummy']) perform(ns) ns = self.mkns(get=u'example.net') perform(ns) dbfile = bsddb3.hashopen(dbname, 'c', 0o600) assert b'example.net' in dbfile assertEqual(dbfile[b'example.net'], b'dummy') dbfile.close()
def test_20_token_version(): # Wrong version sc = sigcloud(xc, 'tuser', 'tdomain', 'BMydsCzkh8-8vjcb9U2gqV/FZQAAEfg', now=utc(5000)) sc.verbose_cloud_request = sc_noauth global cloud_count cloud_count = 0 assertEqual(sc.auth(), False) assertEqual(cloud_count, 1)
def test_success(): xc.session.post = post_200_ok roster, body = sc.roster_cloud() assertEqual(roster, {'user1@domain1': { 'name': 'Ah Be', 'groups': ['Lonely'] }}) assertEqual(body, 'fake body')
def post_200_ok_verify(url, data='', headers='', allow_redirects=False, timeout=5): assertEqual(url, 'https://nosuchhost') assert (data == b'username=usr&operation=isuser&domain=no.such.doma.in' or data == b'operation=isuser&username=usr&domain=no.such.doma.in') hash = hmac.new(b'999', msg=data, digestmod=hashlib.sha1).hexdigest() assertEqual(headers['X-JSXC-SIGNATURE'], 'sha1=' + hash) return post_200_ok(url, data, headers, allow_redirects, timeout)
def test_05_unload(self): expected = [b'example.net', b'example.ch'] self.stub_stdout(ioclass=io.StringIO) ns = self.mkns(unload=True) perform(ns) v = sys.stdout.getvalue() for line in v.split('\n'): if line != '': (k, delim, v) = line.partition('\t') expected.remove(utf8(k)) assertEqual(expected, [])
def test_try_22same_name_uncached(): # Expected: a get call xc.session.post = make_rosterfunc( {'user1@domain1': { 'name': 'Ah Be', 'dummy': '1' }}) xc.ejabberd_controller.execute = ctrl_end assertEqual(sc.try_roster(async=False), True) logging.info(xc.ejabberd_controller.execute) assertEqual(xc.ejabberd_controller.execute, ctrl_end)
def test_02_execute(self): paths = self.mkpaths() sqlconn = connection(paths) r = set() for row in sqlconn.conn.execute('select * from domains'): r.add(row[0:4]) logging.error('r = %r', r) assertEqual(len(r), 2) assert ('example.ch', 'XmplScrt', 'https://example.ch/index.php/apps/ojsxc/ajax/externalApi.php', 'example.ch') in r assert ('example.de', 'NothrXampl', 'https://nothing', '') in r
def test_01_load(self): self.stub_stdin( u'example.ch\tXmplScrt\thttps://example.ch/index.php/apps/ojsxc/ajax/externalApi.php\texample.ch\t\n' + u'example.de\tNothrXampl\thttps://nothing\t\n') ns = self.mkns(load=True) perform(ns) assertEqual( domfile[b'example.ch'], b'XmplScrt\thttps://example.ch/index.php/apps/ojsxc/ajax/externalApi.php\texample.ch\t' ) assertEqual(domfile[b'example.de'], b'NothrXampl\thttps://nothing\t') assert b'example.net' not in domfile
def test_try_31login_again(): # Expected: groups calls global collect collect = [] xc.session.post = make_rosterfunc( {'user1@domain1': { 'name': 'Ah Be', 'groups': ['Lonely'] }}) xc.ejabberd_controller.execute = ctrl_collect assertEqual(sc.try_roster(async=False), True) logging.info(collect) assertEqual(collect, [])
def sc_params2(data): global cloud_count cloud_count += 1 assertEqual(data['operation'], 'auth') assertEqual(data['username'], 'user2') assertEqual(data['domain'], 'domain2') assertEqual(data['password'], 'pass2') return (False, None, 'Connection refused', None)
def test_try_41self_deletion(): global collect collect = [] xc.session.post = make_rosterfunc({'user1@domain1': {'name': 'Ah Be'}}) xc.ejabberd_controller.execute = ctrl_collect sc = sigcloud(xc, 'user1', 'domain1') assertEqual(sc.try_roster(async=False), True) logging.info(collect) assertEqual( collect, [ # The first is unnecessary but harmless and not easily avoidable ['srg_user_del', 'user1', 'domain1', 'Family', 'domain1'], ['srg_user_del', 'user1', 'domain1', 'Lonely', 'domain1'] ])
def test_try_30add_lonely_group(): # Expected: groups calls global collect collect = [] xc.session.post = make_rosterfunc( {'user1@domain1': { 'name': 'Ah Be', 'groups': ['Lonely'] }}) xc.ejabberd_controller.execute = ctrl_collect assertEqual(sc.try_roster(async=False), True) logging.info('collected = ' + str(collect)) assertEqual(collect, [ ['srg_create', 'Lonely', 'domain1', 'Lonely', 'Lonely', 'Lonely'], ['srg_get_members', 'Lonely', 'domain1'], ['srg_user_add', 'user1', 'domain1', 'Lonely', 'domain1'], ])
def test_postfix_connection_error(self): self.stub_stdin('get [email protected]\n') self.stub_stdout() args = get_args(None, None, None, 'xcauth', args=[ '-t', 'postfix', '-u', 'https://no-connection.jsxc.org/', '-s', '0', '-l', dirname ], config_file_contents='#') perform(args) output = sys.stdout.getvalue().rstrip('\n') logging.debug(output) assertEqual(output[0:4], '400 ')
def test_try_40third_party_deletion(): global collect collect = [] xc.session.post = make_rosterfunc({ 'user2@domain1': { 'name': 'De Be', 'groups': ['Family', 'Friends'] }, 'user3@domain1': { 'name': 'Xy Zzy', 'groups': ['Friends'] }, }) xc.ejabberd_controller.execute = ctrl_collect sc = sigcloud(xc, 'user2', 'domain1') assertEqual(sc.try_roster(async=False), True) logging.info(collect) assertEqual(collect, [['srg_user_del', 'user1', 'domain1', 'Family', 'domain1']])
def test_try_33login_other_user(): global collect collect = [] xc.session.post = make_rosterfunc({ 'user1@domain1': { 'name': 'Ce De', 'groups': ['Family'] }, 'user2@domain1': { 'name': 'De Be', 'groups': ['Family', 'Friends'] }, 'user3@domain1': { 'name': 'Xy Zzy', 'groups': ['Friends'] }, }) xc.ejabberd_controller.execute = ctrl_collect sc = sigcloud(xc, 'user2', 'domain1') assertEqual(sc.try_roster(async_=False), True) logging.info(collect) assert collect == [ ['set_vcard', 'user3', 'domain1', 'FN', 'Xy Zzy'], ['srg_create', 'Friends', 'domain1', 'Friends', 'Friends', 'Friends'], ['srg_get_members', 'Friends', 'domain1'], ['srg_user_add', 'user3', 'domain1', 'Friends', 'domain1'], ['srg_user_add', 'user2', 'domain1', 'Friends', 'domain1'], ] or collect == [ ['set_vcard', 'user3', 'domain1', 'FN', 'Xy Zzy'], ['srg_create', 'Friends', 'domain1', 'Friends', 'Friends', 'Friends'], ['srg_get_members', 'Friends', 'domain1'], ['srg_user_add', 'user2', 'domain1', 'Friends', 'domain1'], ['srg_user_add', 'user3', 'domain1', 'Friends', 'domain1'], ] xc.db.conn.dump('rosterinfo') xc.db.conn.dump('rostergroups') assert_grouplist('user1@domain1', 'Family\tLonely') assert_grouplist('user2@domain1', 'Family\tFriends') assert_grouplist('user3@domain1', None) assert_groupinfo('Lonely@domain1', 'user1@domain1') assert_groupinfo('Family@domain1', 'user1@domain1\tuser2@domain1') assert_groupinfo('Friends@domain1', 'user2@domain1\tuser3@domain1')
def test_verify(): success, code, response = verify_with_isuser('https://nosuchhost', '999', 'no.such.doma.in', 'usr', (5, 10), verify_hook) assertEqual(success, True) assertEqual(code, None) assertEqual(response, {'data': {'isUser': '******'}, 'result': 'success'})
def test_try_34login_other_user_again(): global collect collect = [] xc.session.post = make_rosterfunc({ 'user1@domain1': { 'name': 'Ah Be', 'groups': ['Family'], 'dummy': '1' }, 'user2@domain1': { 'name': 'De Be', 'groups': ['Family', 'Friends'] }, 'user3@domain1': { 'name': 'Xy Zzy', 'groups': ['Friends'] }, }) xc.ejabberd_controller.execute = ctrl_collect sc = sigcloud(xc, 'user2', 'domain1') assertEqual(sc.try_roster(async=False), True) logging.info(collect) assertEqual(collect, [])
def test_try_32add_normal_group(): # Expected: groups calls global collect collect = [] xc.session.post = make_rosterfunc({ 'user1@domain1': { 'name': 'Ce De', 'groups': ['Lonely', 'Family'] }, 'user2@domain1': { 'name': 'De Be', 'groups': ['Family'] }, }) xc.ejabberd_controller.execute = ctrl_collect assertEqual(sc.try_roster(async_=False), True) logging.info(collect) assert collect == [ ['set_vcard', 'user2', 'domain1', 'FN', 'De Be'], ['srg_create', 'Family', 'domain1', 'Family', 'Family', 'Family'], ['srg_get_members', 'Family', 'domain1'], ['srg_user_add', 'user1', 'domain1', 'Family', 'domain1'], ['srg_user_add', 'user2', 'domain1', 'Family', 'domain1'], ] or collect == [ ['set_vcard', 'user2', 'domain1', 'FN', 'De Be'], ['srg_create', 'Family', 'domain1', 'Family', 'Family', 'Family'], ['srg_get_members', 'Family', 'domain1'], ['srg_user_add', 'user2', 'domain1', 'Family', 'domain1'], ['srg_user_add', 'user1', 'domain1', 'Family', 'domain1'], ] xc.db.conn.dump('rosterinfo') xc.db.conn.dump('rostergroups') assert_grouplist('user1@domain1', 'Family\tLonely') #assert_grouplist('user2@domain1', 'Family') assert_grouplist('user2@domain1', None) assert_groupinfo('Lonely@domain1', 'user1@domain1') assert_groupinfo('Family@domain1', 'user1@domain1\tuser2@domain1')