def upload() = {
val username = "ci_user_" + java.util.UUID.randomUUID()
val createUserRequest = CreateUserRequest(username, "password")
val toReceiptRequest: (MessageEntity, String, String) => HttpRequest = (requestEntity, userId, accessToken) => {
HttpRequest(method = HttpMethods.POST,
uri = s"http://localhost:9000/user/${userId}/receipt",
entity = requestEntity,
headers = List(Authorization(OAuth2BearerToken(accessToken))))
}
val uploadReceipt: (HttpRequest) => Future[StatusCode] = request => {
val start = System.currentTimeMillis()
println("Starting to upload receipt")
Http().singleRequest(request).map(response => {
println(response.status)
val end = System.currentTimeMillis()
println(s"Receipt uploaded in ${(end - start)}ms")
response.status
})
}
val requests: Future[Seq[HttpRequest]] = for {
userInfo: UserInfo <- createUser(createUserRequest)
accessToken: OAuth2AccessTokenResponse <- authenticateUser(userInfo)
requestEntity: MessageEntity <- createImageFileContent()
} yield Seq.fill(10)(toReceiptRequest(requestEntity, userInfo.id, accessToken.accessToken))
val result: Future[Seq[StatusCode]] = requests.flatMap(requests => Future.sequence(requests.map(request => uploadReceipt(request))))
result
}
implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(200))
akka.http.client.host-connection-pool.max-connections = 100
println("max connections " + ConfigFactory.load().getInt("akka.http.client.host-connection-pool.max-connections"))