Exemplo n.º 1
0
    def do_simple_topic_test(self, pattern, name, properties={}, autodeleted=True):
        mgmt = self.create_connection("amqp0-10", True)
        agent = Mgmt(mgmt)
        agent.create("TopicPolicy", pattern, properties)
        try:
            snd = self.ssn.sender(name)
            rcv1 = self.ssn.receiver(name)
            rcv2 = self.ssn.receiver(name)

            msgs = [Message(content=s, subject=s) for s in ["a", "b", "c", "d"]]
            for m in msgs:
                snd.send(m)

            for rcv in [rcv1, rcv2]:
                for expected in msgs:
                    msg = rcv.fetch(0)
                    assert msg.content == expected.content, (msg.content, expected.content)
            self.ssn.acknowledge()
            rcv1.close()
            rcv2.close()
            snd.close()

            matched = [e for e in agent.list("Exchange") if e["name"] == name]
            if autodeleted:
                # ensure that exchange is no longer there (as it is now unused)
                assert len(matched) == 0, matched
            else:
                # ensure that exchange has not been autodeleted in spite of being unused
                assert len(matched) == 1, matched
        finally:
            agent.delete("TopicPolicy", pattern)
            mgmt.close()
Exemplo n.º 2
0
    def do_simple_queue_test(self, pattern, name, properties={}, autodeleted=True):
        mgmt = self.create_connection("amqp0-10", True)
        agent = Mgmt(mgmt)
        agent.create("QueuePolicy", pattern, properties)
        try:
            snd = self.ssn.sender(name)
            msgs = [Message(content=s, subject=s) for s in ["a", "b", "c", "d"]]
            for m in msgs:
                snd.send(m)
            snd.close()

            for expected in msgs:
                rcv = self.ssn.receiver(name)
                msg = rcv.fetch(0)
                assert msg.content == expected.content, (msg.content, expected.content)
                self.ssn.acknowledge()
                rcv.close()  # close after each message to ensure queue isn't deleted with messages in it
            self.ssn.close()
            self.conn.close()

            matched = [q for q in agent.list("Queue") if q["name"] == name]
            if autodeleted:
                # ensure that queue is no longer there (as empty and unused)
                assert len(matched) == 0, matched
            else:
                # ensure that queue is still there though empty and unused
                assert len(matched) == 1, matched
        finally:
            agent.delete("QueuePolicy", pattern)
            mgmt.close()
Exemplo n.º 3
0
    def do_simple_topic_test(self,
                             pattern,
                             name,
                             properties={},
                             autodeleted=True):
        mgmt = self.create_connection("amqp0-10", True)
        agent = Mgmt(mgmt)
        agent.create('TopicPolicy', pattern, properties)
        try:
            snd = self.ssn.sender(name)
            rcv1 = self.ssn.receiver(name)
            rcv2 = self.ssn.receiver(name)

            msgs = [
                Message(content=s, subject=s) for s in ['a', 'b', 'c', 'd']
            ]
            for m in msgs:
                snd.send(m)

            for rcv in [rcv1, rcv2]:
                for expected in msgs:
                    msg = rcv.fetch(0)
                    assert msg.content == expected.content, (msg.content,
                                                             expected.content)
            self.ssn.acknowledge()
            rcv1.close()
            rcv2.close()
            snd.close()

            matched = [e for e in agent.list("Exchange") if e['name'] == name]
            if autodeleted:
                # ensure that exchange is no longer there (as it is now unused)
                assert len(matched) == 0, (matched)
            else:
                # ensure that exchange has not been autodeleted in spite of being unused
                assert len(matched) == 1, (matched)
        finally:
            agent.delete('TopicPolicy', pattern)
            mgmt.close()
Exemplo n.º 4
0
    def do_simple_queue_test(self,
                             pattern,
                             name,
                             properties={},
                             autodeleted=True):
        mgmt = self.create_connection("amqp0-10", True)
        agent = Mgmt(mgmt)
        agent.create('QueuePolicy', pattern, properties)
        try:
            snd = self.ssn.sender(name)
            msgs = [
                Message(content=s, subject=s) for s in ['a', 'b', 'c', 'd']
            ]
            for m in msgs:
                snd.send(m)
            snd.close()

            for expected in msgs:
                rcv = self.ssn.receiver(name)
                msg = rcv.fetch(0)
                assert msg.content == expected.content, (msg.content,
                                                         expected.content)
                self.ssn.acknowledge()
                rcv.close(
                )  #close after each message to ensure queue isn't deleted with messages in it
            self.ssn.close()
            self.conn.close()

            matched = [q for q in agent.list("Queue") if q['name'] == name]
            if autodeleted:
                # ensure that queue is no longer there (as empty and unused)
                assert len(matched) == 0, (matched)
            else:
                # ensure that queue is still there though empty and unused
                assert len(matched) == 1, (matched)
        finally:
            agent.delete('QueuePolicy', pattern)
            mgmt.close()
Exemplo n.º 5
0
    def test_mgmt(self):
        mgmt = self.create_connection("amqp0-10", True)
        agent = Mgmt(mgmt)
        agent.create("QueuePolicy", "queue-*")
        agent.create("QueuePolicy", "alt.queue.*")
        agent.create("TopicPolicy", "topic-*")
        try:
            queues = [q["name"] for q in agent.list("QueuePolicy")]
            topics = [t["name"] for t in agent.list("TopicPolicy")]
            assert "queue-*" in queues, queues
            assert "alt.queue.*" in queues, queues

            try:
                agent.delete("TopicPolicy", "queue-*")
                assert False, "Deletion of policy using wrong type should fail"
            except:
                None

        finally:
            agent.delete("QueuePolicy", "queue-*")
            agent.delete("QueuePolicy", "alt.queue.*")
            agent.delete("TopicPolicy", "topic-*")
            mgmt.close()
Exemplo n.º 6
0
    def test_mgmt(self):
        mgmt = self.create_connection("amqp0-10", True)
        agent = Mgmt(mgmt)
        agent.create('QueuePolicy', 'queue-*')
        agent.create('QueuePolicy', 'alt.queue.*')
        agent.create('TopicPolicy', 'topic-*')
        try:
            queues = [q['name'] for q in agent.list("QueuePolicy")]
            topics = [t['name'] for t in agent.list("TopicPolicy")]
            assert 'queue-*' in queues, (queues)
            assert 'alt.queue.*' in queues, (queues)

            try:
                agent.delete('TopicPolicy', 'queue-*')
                assert False, (
                    'Deletion of policy using wrong type should fail')
            except:
                None

        finally:
            agent.delete('QueuePolicy', 'queue-*')
            agent.delete('QueuePolicy', 'alt.queue.*')
            agent.delete('TopicPolicy', 'topic-*')
            mgmt.close()
Exemplo n.º 7
0
class AclCtrl(object):
    def __init__(self, broker, path):
        self.policy = path
        self.original = self.read()
        conn = Connection.establish(broker, protocol='amqp0-10', username='******', password='******', sasl_mechanism='PLAIN')
        self.agent = Mgmt(conn)
        self.agent.create('queue', 'acl_test_queue')
        self.lines = []

    def deny(self, user=None, *args):
        self._add_rule('deny', user, *args)
        return self

    def allow(self, user=None, *args):
        self._add_rule('allow', user, *args)
        return self

    def apply(self, allow_admin=True):
        if allow_admin:
            # admin users needs permission to send a qmf message to
            # reload policy
            self.lines.insert(0, 'acl allow admin@QPID all all')
        self.specify("\n".join(self.lines))
        return self

    def dump(self):
        print "\n".join(self.lines)
        return self

    def clear(self):
        self.lines = []
        return self

    def _add_rule(self, deny_or_allow, user=None, *args):
        elements = ['acl', deny_or_allow]
        if user:
            elements.append("%s@QPID" % user)
        else:
            elements.append('all')
        if len(args) > 0:
            for a in args:
                elements.append(a)
        else:
            elements.append('all')
        self.lines.append(' '.join(elements))

    def read(self):
        f = open(self.policy,'r')
        content = f.read()
        f.close()
        return content

    def specify(self, acl):
        f = open(self.policy,'w')
        f.write(acl)
        f.close()
        self.agent.reload_acl_file()

    def restore(self):
        self.agent.delete('queue', 'acl_test_queue')
        self.specify(self.original)
        self.agent.close()
Exemplo n.º 8
0
class AclCtrl(object):
    def __init__(self, broker, path):
        self.policy = path
        self.original = self.read()
        conn = Connection.establish(broker,
                                    protocol='amqp0-10',
                                    username='******',
                                    password='******',
                                    sasl_mechanism='PLAIN')
        self.agent = Mgmt(conn)
        self.agent.create('queue', 'acl_test_queue')
        self.lines = []

    def deny(self, user=None, *args):
        self._add_rule('deny', user, *args)
        return self

    def allow(self, user=None, *args):
        self._add_rule('allow', user, *args)
        return self

    def apply(self, allow_admin=True):
        if allow_admin:
            # admin users needs permission to send a qmf message to
            # reload policy
            self.lines.insert(0, 'acl allow admin@QPID all all')
        self.specify("\n".join(self.lines))
        return self

    def dump(self):
        print "\n".join(self.lines)
        return self

    def clear(self):
        self.lines = []
        return self

    def _add_rule(self, deny_or_allow, user=None, *args):
        elements = ['acl', deny_or_allow]
        if user:
            elements.append("%s@QPID" % user)
        else:
            elements.append('all')
        if len(args) > 0:
            for a in args:
                elements.append(a)
        else:
            elements.append('all')
        self.lines.append(' '.join(elements))

    def read(self):
        f = open(self.policy, 'r')
        content = f.read()
        f.close()
        return content

    def specify(self, acl):
        f = open(self.policy, 'w')
        f.write(acl)
        f.close()
        self.agent.reload_acl_file()

    def restore(self):
        self.agent.delete('queue', 'acl_test_queue')
        self.specify(self.original)
        self.agent.close()