Skip to content

Commit 93b0856

Browse files
authored
Merge pull request #46 from avast/ArgumentsFix
Fix: declare/bind arguments were not loading correctly from HOCON
2 parents da12332 + bfb1fbc commit 93b0856

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

core/src/test/scala/com/avast/clients/rabbitmq/LiveTest.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,8 @@ class LiveTest extends TestBase with ScalaFutures {
283283
_ <- rabbitConnection.bindQueue("bindQueue")
284284
} yield ()).unsafeRunSync()
285285

286+
assertResult(Map("x-max-length" -> 10000))(testHelper.queue.getArguments(queueName2))
287+
286288
assertResult(0)(testHelper.queue.getMessagesCount(queueName1))
287289
assertResult(0)(testHelper.queue.getMessagesCount(queueName2))
288290

core/src/test/scala/com/avast/clients/rabbitmq/TestHelper.scala

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ package com.avast.clients.rabbitmq
33
import java.net.URLEncoder
44
import java.nio.charset.StandardCharsets
55

6+
import io.circe.Decoder
67
import io.circe.generic.auto._
78
import io.circe.parser._
89
import scalaj.http.Http
910

11+
import scala.util.Success
12+
1013
//noinspection ScalaStyle
1114
class TestHelper(host: String, port: Int) {
1215

@@ -46,6 +49,21 @@ class TestHelper(host: String, port: Int) {
4649
}
4750
}
4851

52+
def getArguments(queueName: String): Map[String, Any] = {
53+
val encoded = URLEncoder.encode(queueName, StandardCharsets.UTF_8.toString)
54+
55+
val resp = Http(s"$RootUri/queues/%2f/$encoded").auth("guest", "guest").asString.body
56+
57+
decode[QueueProperties](resp) match {
58+
case Right(p) =>
59+
p.arguments.getOrElse {
60+
Console.err.println(s"Could not extract arguments for $queueName!")
61+
Map.empty
62+
}
63+
case r => throw new IllegalStateException(s"Wrong response $r")
64+
}
65+
}
66+
4967
def delete(queueName: String, ifEmpty: Boolean = false, ifUnused: Boolean = false): Unit = {
5068
println(s"Deleting queue: $queueName")
5169
val encoded = URLEncoder.encode(queueName, StandardCharsets.UTF_8.toString)
@@ -63,7 +81,16 @@ class TestHelper(host: String, port: Int) {
6381
}
6482
}
6583

66-
private case class QueueProperties(messages: Int, message_stats: Option[MessagesStats])
84+
private implicit val anyDecoder: Decoder[Any] = Decoder.decodeJson.emapTry { json =>
85+
// we are in test, it's enough to support just Int and String here
86+
if (json.isNumber) {
87+
json.as[Int].toTry
88+
} else if (json.isString) {
89+
json.as[String].toTry
90+
} else Success(null)
91+
}
92+
93+
private case class QueueProperties(messages: Int, message_stats: Option[MessagesStats], arguments: Option[Map[String, Any]])
6794
private case class MessagesStats(publish: Int, ack: Option[Int])
6895
}
6996

pureconfig/src/main/scala/com/avast/clients/rabbitmq/pureconfig/PureconfigImplicits.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,6 @@ class PureconfigImplicits(implicit namingConvention: NamingConvention = CamelCas
8989
implicit val autoBindQueueConfigReader: ConfigReader[AutoBindQueueConfig] = deriveReader
9090
implicit val autoBindExchangeConfigReader: ConfigReader[AutoBindExchangeConfig] = deriveReader
9191
implicit val producerPropertiesConfigReader: ConfigReader[ProducerPropertiesConfig] = deriveReader
92-
implicit val declareArgumentsConfigReader: ConfigReader[DeclareArgumentsConfig] = deriveReader
93-
implicit val bindArgumentsConfigReader: ConfigReader[BindArgumentsConfig] = deriveReader
9492

9593
implicit val logLevelReader: ConfigReader[Level] = ConfigReader.stringConfigReader.map(Level.valueOf)
9694
implicit val recoveryDelayHandlerReader: ConfigReader[RecoveryDelayHandler] = RecoveryDelayHandlerReader
@@ -119,6 +117,9 @@ class PureconfigImplicits(implicit namingConvention: NamingConvention = CamelCas
119117
cur.asObjectCursor.map(_.value.asScala.toMap.mapValues(_.unwrapped()))
120118
}
121119

120+
implicit val declareArgumentsConfigReader: ConfigReader[DeclareArgumentsConfig] = mapStringAnyReader.map(DeclareArgumentsConfig)
121+
implicit val bindArgumentsConfigReader: ConfigReader[BindArgumentsConfig] = mapStringAnyReader.map(BindArgumentsConfig)
122+
122123
private def withType[A](cur: ConfigCursor)(f: (Config, String) => Result[A]): Result[A] = {
123124
cur.asObjectCursor.right.map(_.value.toConfig).flatMap { config =>
124125
val `type` = config.getString("type")

0 commit comments

Comments
 (0)