예제 #1
0
class TestGlacierSNSManualSubscribe(TestGlacierSNS):
    def test_subscribe_to_existing_topic(self):
        """
        $ glacier-cmd subscribe email endpoint_1 test_topic_1
        """
        self.gw = GlacierWrapper(**self.args)

        topic = 'test_topic_existing_kind_off'

        # sns_subscribe actually creates a topic to "get it"
        response = self.gw.sns_subscribe(protocol="email",
                                         endpoint=localsettings.endpoint_1,
                                         topic=topic,
                                         sns_options={})

        for res in response:
            del res["RequestId"]

        self.assertIn(
            {'SubscribeResult': u'pending confirmation'},
            response)

        all_topics = self.gw.sns_conn.get_all_topics()\
['ListTopicsResponse']\
['ListTopicsResult']\
['Topics']
        topics = [t['TopicArn'].split(":")[-1] for t in all_topics]
        self.assertIn(topic, topics)

    def test_subscribe_create_topic_for_vaults(self):
        """
        $ glacier-cmd
            subscribe email endpoint_1 test_topic --vault test_vvault0,test_vvault
        """
        self.gw = GlacierWrapper(**self.args)

        vaults = ['test_vvault0', 'test_vvault1', 'test_vvault2']
        vaults_used = [vaults[0], vaults[2]]

        topic = 'test_topic_new_for_vaults'

        for vault in vaults:
            self.gw.mkvault(vault)

        response = self.gw.sns_subscribe(protocol="email",
                                         endpoint=localsettings.endpoint_1,
                                         topic=topic,
                                         vault_names=",".join(vaults_used),
                                         sns_options={})
        for res in response:
            del res["RequestId"]

        self.assertIn(
            {'SubscribeResult': u'pending confirmation'},
            response)

        # Lets check that the topic was created
        all_topics = self.gw.sns_conn.get_all_topics()\
['ListTopicsResponse']\
['ListTopicsResult']\
['Topics']

        topics = [t['TopicArn'].split(":")[-1] for t in all_topics]
        self.assertIn(topic, topics)

        for vault in vaults_used:
            notifications = self.gw.glacierconn.get_vault_notifications(vault)
            self.assertIn("ArchiveRetrievalCompleted",
                          notifications['Events'])
            self.assertIn("InventoryRetrievalCompleted",
                          notifications['Events'])
            self.assertEqual(topic,
                             notifications['SNSTopic'].split(":")[-1])