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)