inspec/test/unit/resources/aws_sqs_queue_test.rb

131 lines
4.1 KiB
Ruby
Raw Normal View History

require "helper"
require "inspec/resource"
require "resources/aws/aws_sqs_queue"
require "resource_support/aws"
# MSQB = MockSQsBackend
# Abbreviation not used outside this file
#=============================================================================#
# Constructor Tests
#=============================================================================#
class AwsSqsQueueConstructorTest < Minitest::Test
def setup
AwsSqsQueue::BackendFactory.select(AwsMSQB::Hit)
end
def test_constructor_some_args_required
assert_raises(ArgumentError) { AwsSqsQueue.new }
end
def test_constructor_accepts_scalar_url
AwsSqsQueue.new("https://sqs.ap-southeast-2.amazonaws.com/5195277125796/MyQueue")
end
def test_constructor_accepts_url_as_hash
AwsSqsQueue.new(url: "https://sqs.ap-southeast-2.amazonaws.com/5195277125796/MyQueue")
end
def test_constructor_rejects_unrecognized_resource_params
assert_raises(ArgumentError) { AwsSqsQueue.new(beep: "boop") }
end
def test_constructor_rejects_non_https_url
[
"not-even-a-url",
"http://example.com", # http
].each do |example|
assert_raises(ArgumentError) { AwsSqsQueue.new(url: example) }
end
end
end
#=============================================================================#
# Search/Recall
#=============================================================================#
class AwsSqsQueueRecallTest < Minitest::Test
# No setup here - each test needs to explicitly declare
# what they want from the backend.
def test_recall_no_match_is_no_exception
AwsSqsQueue::BackendFactory.select(AwsMSQB::Miss)
queue = AwsSqsQueue.new("https://sqs.ap-southeast-2.amazonaws.com/12121/idontexist")
refute queue.exists?
end
def test_recall_match_single_result_works
AwsSqsQueue::BackendFactory.select(AwsMSQB::Hit)
queue = AwsSqsQueue.new("https://sqs.ap-southeast-2.amazonaws.com/12121/iexist")
assert queue.exists?
end
end
#=============================================================================#
# Properties
#=============================================================================#
class AwsSqsQueuePropertiesTest < Minitest::Test
# No setup here - each test needs to explicitly declare
# what they want from the backend.
#---------------------------------------
# confirmed_subscription_count
#---------------------------------------
def test_visibility_timeout
AwsSqsQueue::BackendFactory.select(AwsMSQB::Hit)
queue = AwsSqsQueue.new("https://sqs.ap-southeast-2.amazonaws.com/12121/iexist")
assert_equal(300, queue.visibility_timeout)
end
def test_not_fifo_queue
AwsSqsQueue::BackendFactory.select(AwsMSQB::Hit)
queue = AwsSqsQueue.new("https://sqs.ap-southeast-2.amazonaws.com/12121/iexist")
refute queue.is_fifo_queue
end
def test_fifo_queue
AwsSqsQueue::BackendFactory.select(AwsMSQB::FifoQueue)
queue = AwsSqsQueue.new("https://sqs.ap-southeast-2.amazonaws.com/12121/iexist")
assert queue.is_fifo_queue
assert queue.content_based_deduplication
end
end
#=============================================================================#
# Test Fixtures
#=============================================================================#
module AwsMSQB
class Miss < AwsBackendBase
def get_queue_attributes(criteria)
raise Aws::SQS::Errors::NonExistentQueue.new("No SQS queue with URL #{criteria[:url]}", "Nope")
end
end
class Hit < AwsBackendBase
def get_queue_attributes(_criteria)
OpenStruct.new({
attributes: {
"QueueArn" => "arn:aws:sqs:ap-southeast-2:519527721296:MyQueue",
"VisibilityTimeout" => 300,
},
})
end
end
class FifoQueue < AwsBackendBase
def get_queue_attributes(_criteria)
OpenStruct.new({
attributes: {
"QueueArn" => "arn:aws:sqs:ap-southeast-2:519527721296:MyQueue.fifo",
"VisibilityTimeout" => 300,
"FifoQueue" => true,
"ContentBasedDeduplication" => true,
},
})
end
end
end