mirror of
https://github.com/priyanshujain/sanderling.git
synced 2026-10-02 19:17:10 +00:00
fix: pre-v0.1 review feedback (#14)
* fix(sdk-android): add @JvmOverloads to Uatu.start Java callers can now invoke start(application) without supplying a Configuration, matching the Kotlin default-arg ergonomics. * feat(agent): add protocol_version to HELLO handshake ProtocolVersion=1 lives on Message and is set by Hello(). Server.Accept rejects mismatches with a clear error. SDK upgrades that don't change the wire format keep the same protocol_version; bump on breaking changes. * test(agent): assert protocol_version in Hello round-trip * feat(sdk-android): send protocol_version=1 in HELLO Mirrors agent.ProtocolVersion on the Go side. Bump in lockstep with the Go constant when the wire format breaks. * chore(sample-app): pull @uatu/spec from npm next tag Replaces the file: dep. Copy-paste users can now npm install against the registry. The release workflow publishes pre-release tags to npm dist-tag 'next', so the sample tracks the latest rc without manual version bumps. Lockfile currently resolves to 0.0.1-rc3.
This commit is contained in:
9 files changed
+67
-20
No files matched your search
@@ -26,6 +26,7 @@ enum class MessageType(val wire: String) {
|
||||
data class Message(
|
||||
val type: MessageType,
|
||||
val id: Long = 0L,
|
||||
val protocolVersion: Int = 0,
|
||||
val version: String? = null,
|
||||
val platform: String? = null,
|
||||
val appPackage: String? = null,
|
||||
@@ -37,7 +38,13 @@ data class Message(
|
||||
) {
|
||||
companion object {
|
||||
fun hello(version: String, platform: String, appPackage: String): Message =
|
||||
Message(MessageType.HELLO, version = version, platform = platform, appPackage = appPackage)
|
||||
Message(
|
||||
MessageType.HELLO,
|
||||
protocolVersion = Protocol.PROTOCOL_VERSION,
|
||||
version = version,
|
||||
platform = platform,
|
||||
appPackage = appPackage,
|
||||
)
|
||||
|
||||
fun pause(id: Long): Message = Message(MessageType.PAUSE, id = id)
|
||||
|
||||
@@ -56,6 +63,9 @@ data class Message(
|
||||
object Protocol {
|
||||
const val MAX_FRAME_SIZE: Int = 16 * 1024 * 1024
|
||||
|
||||
// Wire-format version. Must match agent.ProtocolVersion on the Go side.
|
||||
const val PROTOCOL_VERSION: Int = 1
|
||||
|
||||
@Throws(IOException::class)
|
||||
fun write(output: OutputStream, message: Message) {
|
||||
val bytes = toJson(message).toString().toByteArray(Charsets.UTF_8)
|
||||
@@ -85,6 +95,7 @@ object Protocol {
|
||||
val json = JSONObject()
|
||||
json.put("type", message.type.wire)
|
||||
if (message.id != 0L) json.put("id", message.id)
|
||||
if (message.protocolVersion != 0) json.put("protocol_version", message.protocolVersion)
|
||||
message.version?.let { json.put("version", it) }
|
||||
message.platform?.let { json.put("platform", it) }
|
||||
message.appPackage?.let { json.put("app_package", it) }
|
||||
@@ -108,6 +119,7 @@ object Protocol {
|
||||
return Message(
|
||||
type = MessageType.fromWire(typeString),
|
||||
id = json.optLong("id", 0L),
|
||||
protocolVersion = json.optInt("protocol_version", 0),
|
||||
version = json.optStringOrNull("version"),
|
||||
platform = json.optStringOrNull("platform"),
|
||||
appPackage = json.optStringOrNull("app_package"),
|
||||
|
||||
@@ -14,6 +14,7 @@ object Uatu {
|
||||
|
||||
@Volatile private var runtime: UatuRuntime? = null
|
||||
|
||||
@JvmOverloads
|
||||
@Synchronized
|
||||
fun start(application: Application, configuration: Configuration = Configuration()) {
|
||||
if (runtime != null) return
|
||||
|
||||
@@ -24,6 +24,7 @@ class ProtocolTest {
|
||||
@Test fun roundTripHello() {
|
||||
val got = roundTrip(Message.hello("0.0.1", "android", "in.okcredit.merchant"))
|
||||
assertEquals(MessageType.HELLO, got.type)
|
||||
assertEquals(Protocol.PROTOCOL_VERSION, got.protocolVersion)
|
||||
assertEquals("0.0.1", got.version)
|
||||
assertEquals("android", got.platform)
|
||||
assertEquals("in.okcredit.merchant", got.appPackage)
|
||||
@@ -140,6 +141,7 @@ class ProtocolTest {
|
||||
Protocol.write(output, Message.hello("0.0.1", "android", "com.x"))
|
||||
val payload = String(output.toByteArray().copyOfRange(4, output.size()), Charsets.UTF_8)
|
||||
assertTrue(payload.contains("\"type\":\"HELLO\""))
|
||||
assertTrue(payload.contains("\"protocol_version\":1"))
|
||||
assertTrue(payload.contains("\"version\":\"0.0.1\""))
|
||||
assertTrue(payload.contains("\"platform\":\"android\""))
|
||||
assertTrue(payload.contains("\"app_package\":\"com.x\""))
|
||||
|
||||
Reference in new issue
Block a user