diff --git a/moto/sqs/models.py b/moto/sqs/models.py index f90aee57..42e9d865 100644 --- a/moto/sqs/models.py +++ b/moto/sqs/models.py @@ -38,5 +38,9 @@ class SQSBackend(BaseBackend): return self.queues.pop(queue_name) return False + def set_queue_attribute(self, queue_name, key, value): + queue = self.get_queue(queue_name) + setattr(queue, key, value) + return queue sqs_backend = SQSBackend() diff --git a/moto/sqs/responses.py b/moto/sqs/responses.py index a4f4c735..126dd1ff 100644 --- a/moto/sqs/responses.py +++ b/moto/sqs/responses.py @@ -51,6 +51,13 @@ class QueueResponse(BaseResponse): template = Template(GET_QUEUE_ATTRIBUTES_RESPONSE) return template.render(queue=queue) + def set_queue_attributes(self): + queue_name = self.path.split("/")[-1] + key = camelcase_to_underscores(self.querystring.get('Attribute.Name')[0]) + value = self.querystring.get('Attribute.Value')[0] + queue = sqs_backend.set_queue_attribute(queue_name, key, value) + return SET_QUEUE_ATTRIBUTE_RESPONSE + def delete_queue(self): queue_name = self.path.split("/")[-1] queue = sqs_backend.delete_queue(queue_name) @@ -107,4 +114,12 @@ GET_QUEUE_ATTRIBUTES_RESPONSE = """ 1ea71be5-b5a2-4f9d-b85a-945d8d08cd0b -""" \ No newline at end of file +""" + +SET_QUEUE_ATTRIBUTE_RESPONSE = """ + + + e5cca473-4fc0-4198-a451-8abb94d02c75 + + +""" diff --git a/tests/test_sqs/test_sqs.py b/tests/test_sqs/test_sqs.py index c3dce18f..7fd1d544 100644 --- a/tests/test_sqs/test_sqs.py +++ b/tests/test_sqs/test_sqs.py @@ -28,3 +28,16 @@ def test_delete_queue(): conn.get_all_queues().should.have.length_of(0) queue.delete.when.called_with().should.throw(SQSError) + + +@mock_sqs +def test_set_queue_attribute(): + conn = boto.connect_sqs('the_key', 'the_secret') + conn.create_queue("test-queue", visibility_timeout=60) + + queue = conn.get_all_queues()[0] + queue.get_timeout().should.equal(60) + + queue.set_attribute("VisibilityTimeout", 45) + queue = conn.get_all_queues()[0] + queue.get_timeout().should.equal(45)