def test_attributes(self): sd1 = SessionDetails() td1 = TransportDetails.parse(TRANSPORT_DETAILS_1) sd1.realm = 'realm1' sd1.session = 666 sd1.authid = 'homer' sd1.authrole = 'user' sd1.authmethod = 'wampcra' sd1.authprovider = 'static' sd1.authextra = {'foo': 'bar', 'baz': [1, 2, 3]} sd1.serializer = 'json' sd1.transport = td1 sd1.resumed = False sd1.resumable = True sd1.resume_token = '8713e25a-d4f5-48b7-9d6d-eda66603a1ab' data = sd1.marshal() self.assertEqual( data, { 'realm': sd1.realm, 'session': sd1.session, 'authid': sd1.authid, 'authrole': sd1.authrole, 'authmethod': sd1.authmethod, 'authprovider': sd1.authprovider, 'authextra': sd1.authextra, 'serializer': sd1.serializer, 'transport': sd1.transport.marshal(), 'resumed': sd1.resumed, 'resumable': sd1.resumable, 'resume_token': sd1.resume_token, }) sd2 = SessionDetails.parse(data) self.assertEqual(sd2, sd1)
def get_session_by_session_id(self, session_id: int, joined_before: Optional[int] = None) -> Optional[Dict[str, Any]]: """ Implements :meth:`crossbar._interfaces.IRealmStore.get_session_by_session_id` """ if joined_before: _joined_before = np.datetime64(joined_before, 'ns') else: _joined_before = np.datetime64(time_ns(), 'ns') _from_key = (session_id, np.datetime64(0, 'ns')) _to_key = (session_id, _joined_before) # check if we have a record store for the session session: Optional[cfxdb.realmstore.Session] = None with self._db.begin() as txn: # lookup session by WAMP session ID and find the most recent session # according to joined_at timestamp for session_oid in self._schema.idx_sessions_by_session_id.select(txn, from_key=_from_key, to_key=_to_key, reverse=True, return_keys=False, return_values=True): session = self._schema.sessions[txn, session_oid] # if we have an index, that index must always resolve to an indexed record assert session # we only want the most recent session break if session: # extract info from database table to construct session details and return td = TransportDetails.parse(session.transport) sd = SessionDetails( realm=session.realm, session=session.session, authid=session.authid, authrole=session.authrole, authmethod=session.authmethod, authprovider=session.authprovider, authextra=session.authextra, # FIXME serializer=None, resumed=False, resumable=False, resume_token=None, transport=td) res = sd.marshal() return res else: return None
def test_empty(self): sd1 = SessionDetails() data = sd1.marshal() self.assertEqual(data, { 'realm': None, 'session': None, 'authid': None, 'authrole': None, 'authmethod': None, 'authprovider': None, 'authextra': None, 'serializer': None, 'transport': None, 'resumed': None, 'resumable': None, 'resume_token': None, }) sd2 = SessionDetails.parse(data) self.assertEqual(sd2, sd1)