-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathElasticMQControllerSpec.scala
85 lines (72 loc) · 3.33 KB
/
ElasticMQControllerSpec.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.github.j5ik2o.dockerController.elasticmq
import com.amazonaws.auth.{ AWSCredentialsProviderChain, AWSStaticCredentialsProvider, BasicAWSCredentials }
import com.amazonaws.client.builder.AwsClientBuilder
import com.amazonaws.regions.Regions
import com.amazonaws.services.sqs.AmazonSQSClientBuilder
import com.amazonaws.services.sqs.model.{ CreateQueueRequest, SendMessageRequest, SetQueueAttributesRequest }
import com.github.j5ik2o.dockerController.{
DockerController,
DockerControllerSpecSupport,
RandomPortUtil,
WaitPredicates
}
import org.scalatest.freespec.AnyFreeSpec
import java.util.UUID
import scala.concurrent.duration._
class ElasticMQControllerSpec extends AnyFreeSpec with DockerControllerSpecSupport {
val testTimeFactor: Int = sys.env.getOrElse("TEST_TIME_FACTOR", "1").toInt
logger.debug(s"testTimeFactor = $testTimeFactor")
val hostPorts: Seq[Int] = Seq(temporaryServerPort(), RandomPortUtil.temporaryServerPort())
val controller: ElasticMQController = ElasticMQController(dockerClient)(dockerHost, hostPorts)
override protected val dockerControllers: Vector[DockerController] = Vector(controller)
override protected val waitPredicatesSettings: Map[DockerController, WaitPredicateSetting] =
Map(
controller -> WaitPredicateSetting(
Duration.Inf,
WaitPredicates.forListeningHostTcpPort(
dockerHost,
hostPorts.head,
(1 * testTimeFactor).seconds,
Some((5 * testTimeFactor).seconds)
)
)
)
"ElasticMQController" - {
"run" in {
val client = AmazonSQSClientBuilder
.standard()
.withCredentials(
new AWSCredentialsProviderChain(new AWSStaticCredentialsProvider(new BasicAWSCredentials("x", "x")))
)
.withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration(
s"http://${dockerHost}:${hostPorts.head}",
Regions.DEFAULT_REGION.getName
)
).build()
val queueName = "test"
val request = new CreateQueueRequest(queueName)
.addAttributesEntry("VisibilityTimeout", "5")
.addAttributesEntry("DelaySeconds", "1")
val createQueueResult = client.createQueue(request)
assert(createQueueResult.getSdkHttpMetadata.getHttpStatusCode == 200)
val queueUrlResult = client.getQueueUrl(queueName)
assert(queueUrlResult.getSdkHttpMetadata.getHttpStatusCode == 200)
val queueUrl = queueUrlResult.getQueueUrl
val setAttrsRequest = new SetQueueAttributesRequest()
.withQueueUrl(queueUrl)
.addAttributesEntry("ReceiveMessageWaitTimeSeconds", "5")
val queueAttributesResult = client.setQueueAttributes(setAttrsRequest)
assert(queueAttributesResult.getSdkHttpMetadata.getHttpStatusCode == 200)
val text = UUID.randomUUID().toString
val sendMessageRequest = new SendMessageRequest(queueUrl, text)
val sendMessageResult = client.sendMessage(sendMessageRequest)
assert(sendMessageResult.getSdkHttpMetadata.getHttpStatusCode == 200)
val receiveMessageResult = client.receiveMessage(queueUrl)
assert(receiveMessageResult.getSdkHttpMetadata.getHttpStatusCode == 200)
assert(receiveMessageResult.getMessages.size() > 0)
val message = receiveMessageResult.getMessages.get(0)
assert(message.getBody == text)
}
}
}