solution: test accesslog writer

This commit is contained in:
Igor Artamonov
2021-07-19 22:19:48 -04:00
parent 9e49b0e13d
commit 3a12efd0a0

View File

@@ -0,0 +1,53 @@
package io.emeraldpay.dshackle.monitoring.accesslog
import com.fasterxml.jackson.databind.ObjectMapper
import io.emeraldpay.dshackle.Global
import io.emeraldpay.dshackle.config.AccessLogConfig
import io.emeraldpay.dshackle.config.MainConfig
import io.emeraldpay.grpc.Chain
import spock.lang.Specification
import java.time.Instant
class AccessLogWriterSpec extends Specification {
def "writes log event"() {
setup:
File dir = File.createTempDir("dshackle-test-")
File accessLog = new File(dir, "accesslog.jsonl")
println("Write access log to $accessLog.absolutePath")
MainConfig config = new MainConfig()
config.accessLogConfig = new AccessLogConfig(true).tap {
it.filename = accessLog.absolutePath
}
AccessLogWriter logWriter = new AccessLogWriter(config)
when:
def event = new Events.Status(
Chain.ETHEREUM, UUID.fromString("9d8ecbf3-12fb-49cf-af9d-949a1050a000"),
new Events.StreamRequestDetails(
UUID.fromString("9d8ecbf3-12fb-49cf-af9d-949a1050a000"),
Instant.ofEpochMilli(1626746880123),
new Events.Remote(
["127.0.0.1", "172.217.8.78"], "172.217.8.78", "UnitTest"
)
)
)
logWriter.submit([event])
logWriter.flush()
def act = accessLog.readLines()
then:
act.size() == 1
with(act[0]) {
def json = Global.objectMapper.readValue(it, Map)
json["version"] == "accesslog/v1beta"
json["id"] == "9d8ecbf3-12fb-49cf-af9d-949a1050a000"
json["method"] == "Status"
json["blockchain"] == "ETHEREUM"
json["request"]["start"] == "2021-07-20T02:08:00.123Z"
json["request"]["id"] == "9d8ecbf3-12fb-49cf-af9d-949a1050a000"
json["request"]["remote"]["ip"] == "172.217.8.78"
json["request"]["remote"]["userAgent"] == "UnitTest"
}
}
}