123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- # Copyright (C) 2010 Internet Systems Consortium.
- #
- # Permission to use, copy, modify, and distribute this software for any
- # purpose with or without fee is hereby granted, provided that the above
- # copyright notice and this permission notice appear in all copies.
- #
- # THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
- # DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- # INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- # INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- # FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- # $Id$
- import isc
- #
- # We can probably use a more general version of this
- #
- class FakeModuleCCSession:
- def __init__(self):
- self.subscriptions = {}
- # each entry is of the form [ channel, instance, message ]
- self.message_queue = []
- self._socket = "ok we just need something not-None here atm"
- # if self.timeout is set to anything other than 0, and
- # the message_queue is empty when receive is called, throw
- # a SessionTimeout
- self._timeout = 0
- def group_subscribe(self, group_name, instance_name = None):
- if not group_name in self.subscriptions:
- self.subscriptions[group_name] = []
- if instance_name:
- self.subscriptions[group_name].append(instance_name)
-
- def group_unsubscribe(self, group_name, instance_name = None):
- if group_name in self.subscriptions:
- if instance_name:
- if len(self.subscriptions[group_name]) > 1:
- del self.subscriptions[group_name][instance_name]
- else:
- del self.subscriptions[group_name]
- else:
- del self.subscriptions[group_name]
-
- def has_subscription(self, group_name, instance_name = None):
- if group_name in self.subscriptions:
- if instance_name:
- return instance_name in self.subscriptions[group_name]
- else:
- return True
- else:
- return False
- def group_sendmsg(self, msg, channel, target = None):
- self.message_queue.append([ channel, target, msg ])
- def group_reply(self, env, msg):
- if 'group' in env:
- self.message_queue.append([ env['group'], None, msg])
- def group_recvmsg(self, blocking, seq = None):
- for qm in self.message_queue:
- if qm[0] in self.subscriptions and (qm[1] == None or qm[1] in self.subscriptions[qm[0]]):
- self.message_queue.remove(qm)
- return qm[2], {'group': qm[0], 'from': qm[1]}
- if self._timeout == 0:
- return None, None
- else:
- raise isc.cc.SessionTimeout("Timeout set but no data to "
- "return to group_recvmsg()")
- def get_message(self, channel, target = None):
- for qm in self.message_queue:
- if qm[0] == channel and qm[1] == target:
- self.message_queue.remove(qm)
- return qm[2]
- return None
- def close(self):
- # need to pass along somehow that this function has been called,
- self._socket = "closed"
- def set_timeout(self, timeout):
- self._timeout = timeout
|