Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add unit tests for backend requests and responses #284

Merged
merged 7 commits into from
Dec 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ import org.opensearch.client.Client
import org.opensearch.common.inject.Inject
import org.opensearch.common.xcontent.NamedXContentRegistry
import org.opensearch.commons.authuser.User
import org.opensearch.observability.model.CreateObservabilityObjectRequest
import org.opensearch.observability.model.CreateObservabilityObjectResponse
import org.opensearch.transport.TransportService

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package org.opensearch.observability.model
package org.opensearch.observability.action

import org.opensearch.action.ActionRequest
import org.opensearch.action.ActionRequestValidationException
Expand All @@ -17,6 +17,9 @@ import org.opensearch.common.xcontent.XContentParser
import org.opensearch.common.xcontent.XContentParserUtils
import org.opensearch.commons.utils.fieldIfNotNull
import org.opensearch.commons.utils.logger
import org.opensearch.observability.model.BaseObjectData
import org.opensearch.observability.model.ObservabilityObjectDataProperties
import org.opensearch.observability.model.ObservabilityObjectType
import org.opensearch.observability.model.RestTag.OBJECT_ID_FIELD
import java.io.IOException

Expand Down Expand Up @@ -124,6 +127,7 @@ internal class CreateObservabilityObjectRequest : ActionRequest, ToXContentObjec
super.writeTo(output)
output.writeOptionalString(objectId)
output.writeEnum(type)
output.writeEnum(type)
output.writeOptionalWriteable(objectData)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package org.opensearch.observability.model
package org.opensearch.observability.action

import org.opensearch.common.io.stream.StreamInput
import org.opensearch.common.io.stream.StreamOutput
Expand All @@ -13,6 +13,7 @@ import org.opensearch.common.xcontent.XContentBuilder
import org.opensearch.common.xcontent.XContentParser
import org.opensearch.common.xcontent.XContentParserUtils
import org.opensearch.commons.utils.logger
import org.opensearch.observability.model.BaseResponse
import org.opensearch.observability.model.RestTag.OBJECT_ID_FIELD
import java.io.IOException

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ import org.opensearch.client.Client
import org.opensearch.common.inject.Inject
import org.opensearch.common.xcontent.NamedXContentRegistry
import org.opensearch.commons.authuser.User
import org.opensearch.observability.model.DeleteObservabilityObjectRequest
import org.opensearch.observability.model.DeleteObservabilityObjectResponse
import org.opensearch.transport.TransportService

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package org.opensearch.observability.model
package org.opensearch.observability.action

import org.opensearch.action.ActionRequest
import org.opensearch.action.ActionRequestValidationException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package org.opensearch.observability.model
package org.opensearch.observability.action

import org.opensearch.common.io.stream.StreamInput
import org.opensearch.common.io.stream.StreamOutput
Expand All @@ -17,6 +17,7 @@ import org.opensearch.commons.utils.STRING_WRITER
import org.opensearch.commons.utils.enumReader
import org.opensearch.commons.utils.enumWriter
import org.opensearch.commons.utils.logger
import org.opensearch.observability.model.BaseResponse
import org.opensearch.observability.model.RestTag.DELETE_RESPONSE_LIST_TAG
import org.opensearch.rest.RestStatus
import java.io.IOException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ import org.opensearch.client.Client
import org.opensearch.common.inject.Inject
import org.opensearch.common.xcontent.NamedXContentRegistry
import org.opensearch.commons.authuser.User
import org.opensearch.observability.model.GetObservabilityObjectRequest
import org.opensearch.observability.model.GetObservabilityObjectResponse
import org.opensearch.transport.TransportService

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package org.opensearch.observability.model
package org.opensearch.observability.action

import org.opensearch.action.ActionRequest
import org.opensearch.action.ActionRequestValidationException
Expand All @@ -23,6 +23,7 @@ import org.opensearch.commons.utils.enumSet
import org.opensearch.commons.utils.fieldIfNotNull
import org.opensearch.commons.utils.logger
import org.opensearch.commons.utils.stringList
import org.opensearch.observability.model.ObservabilityObjectType
import org.opensearch.observability.model.RestTag.FILTER_PARAM_LIST_FIELD
import org.opensearch.observability.model.RestTag.FROM_INDEX_FIELD
import org.opensearch.observability.model.RestTag.MAX_ITEMS_FIELD
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@
* SPDX-License-Identifier: Apache-2.0
*/

package org.opensearch.observability.model
package org.opensearch.observability.action

import org.opensearch.common.io.stream.StreamInput
import org.opensearch.common.io.stream.StreamOutput
import org.opensearch.common.io.stream.Writeable
import org.opensearch.common.xcontent.ToXContent
import org.opensearch.common.xcontent.XContentBuilder
import org.opensearch.common.xcontent.XContentParser
import org.opensearch.observability.model.BaseResponse
import org.opensearch.observability.model.ObservabilityObjectSearchResult
import org.opensearch.observability.model.RestTag
import java.io.IOException

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,8 @@ import org.opensearch.OpenSearchStatusException
import org.opensearch.commons.authuser.User
import org.opensearch.observability.ObservabilityPlugin.Companion.LOG_PREFIX
import org.opensearch.observability.index.ObservabilityIndex
import org.opensearch.observability.model.CreateObservabilityObjectRequest
import org.opensearch.observability.model.CreateObservabilityObjectResponse
import org.opensearch.observability.model.DeleteObservabilityObjectRequest
import org.opensearch.observability.model.DeleteObservabilityObjectResponse
import org.opensearch.observability.model.GetObservabilityObjectRequest
import org.opensearch.observability.model.GetObservabilityObjectResponse
import org.opensearch.observability.model.ObservabilityObjectDoc
import org.opensearch.observability.model.ObservabilityObjectSearchResult
import org.opensearch.observability.model.UpdateObservabilityObjectRequest
import org.opensearch.observability.model.UpdateObservabilityObjectResponse
import org.opensearch.observability.security.UserAccessManager
import org.opensearch.observability.util.logger
import org.opensearch.rest.RestStatus
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ import org.opensearch.client.Client
import org.opensearch.common.inject.Inject
import org.opensearch.common.xcontent.NamedXContentRegistry
import org.opensearch.commons.authuser.User
import org.opensearch.observability.model.UpdateObservabilityObjectRequest
import org.opensearch.observability.model.UpdateObservabilityObjectResponse
import org.opensearch.transport.TransportService

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package org.opensearch.observability.model
package org.opensearch.observability.action

import org.opensearch.action.ActionRequest
import org.opensearch.action.ActionRequestValidationException
Expand All @@ -19,6 +19,9 @@ import org.opensearch.common.xcontent.XContentParser
import org.opensearch.common.xcontent.XContentParserUtils
import org.opensearch.commons.utils.fieldIfNotNull
import org.opensearch.commons.utils.logger
import org.opensearch.observability.model.BaseObjectData
import org.opensearch.observability.model.ObservabilityObjectDataProperties
import org.opensearch.observability.model.ObservabilityObjectType
import org.opensearch.observability.model.RestTag.OBJECT_ID_FIELD
import java.io.IOException

Expand Down Expand Up @@ -126,6 +129,7 @@ internal class UpdateObservabilityObjectRequest : ActionRequest, ToXContentObjec
super.writeTo(output)
output.writeString(objectId)
output.writeEnum(type)
output.writeEnum(type)
output.writeOptionalWriteable(objectData)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package org.opensearch.observability.model
package org.opensearch.observability.action

import org.opensearch.common.io.stream.StreamInput
import org.opensearch.common.io.stream.StreamOutput
Expand All @@ -13,6 +13,7 @@ import org.opensearch.common.xcontent.XContentParser
import org.opensearch.common.xcontent.XContentParser.Token
import org.opensearch.common.xcontent.XContentParserUtils
import org.opensearch.observability.ObservabilityPlugin.Companion.LOG_PREFIX
import org.opensearch.observability.model.BaseResponse
import org.opensearch.observability.model.RestTag.OBJECT_ID_FIELD
import org.opensearch.observability.util.logger
import java.io.IOException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import org.opensearch.index.query.QueryBuilders
import org.opensearch.index.reindex.ReindexAction
import org.opensearch.index.reindex.ReindexRequestBuilder
import org.opensearch.observability.ObservabilityPlugin.Companion.LOG_PREFIX
import org.opensearch.observability.model.GetObservabilityObjectRequest
import org.opensearch.observability.action.GetObservabilityObjectRequest
import org.opensearch.observability.model.ObservabilityObjectDoc
import org.opensearch.observability.model.ObservabilityObjectDocInfo
import org.opensearch.observability.model.ObservabilityObjectSearchResult
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@ import org.opensearch.commons.utils.logger
import org.opensearch.observability.ObservabilityPlugin.Companion.BASE_OBSERVABILITY_URI
import org.opensearch.observability.ObservabilityPlugin.Companion.LOG_PREFIX
import org.opensearch.observability.action.CreateObservabilityObjectAction
import org.opensearch.observability.action.CreateObservabilityObjectRequest
import org.opensearch.observability.action.DeleteObservabilityObjectAction
import org.opensearch.observability.action.DeleteObservabilityObjectRequest
import org.opensearch.observability.action.GetObservabilityObjectAction
import org.opensearch.observability.action.GetObservabilityObjectRequest
import org.opensearch.observability.action.ObservabilityActions
import org.opensearch.observability.action.UpdateObservabilityObjectAction
import org.opensearch.observability.action.UpdateObservabilityObjectRequest
import org.opensearch.observability.index.ObservabilityQueryHelper
import org.opensearch.observability.model.CreateObservabilityObjectRequest
import org.opensearch.observability.model.DeleteObservabilityObjectRequest
import org.opensearch.observability.model.GetObservabilityObjectRequest
import org.opensearch.observability.model.ObservabilityObjectType
import org.opensearch.observability.model.RestTag.FROM_INDEX_FIELD
import org.opensearch.observability.model.RestTag.MAX_ITEMS_FIELD
Expand All @@ -25,7 +26,6 @@ import org.opensearch.observability.model.RestTag.OBJECT_ID_LIST_FIELD
import org.opensearch.observability.model.RestTag.OBJECT_TYPE_FIELD
import org.opensearch.observability.model.RestTag.SORT_FIELD_FIELD
import org.opensearch.observability.model.RestTag.SORT_ORDER_FIELD
import org.opensearch.observability.model.UpdateObservabilityObjectRequest
import org.opensearch.observability.settings.PluginSettings
import org.opensearch.observability.util.contentParserNextToken
import org.opensearch.rest.BaseRestHandler
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,35 @@ import org.opensearch.common.xcontent.ToXContent
import org.opensearch.common.xcontent.XContentFactory
import org.opensearch.common.xcontent.XContentParser
import org.opensearch.common.xcontent.XContentType
import org.opensearch.observability.model.ObservabilityObjectDoc
import org.opensearch.observability.model.ObservabilityObjectType
import org.opensearch.observability.model.Timestamp
import java.io.ByteArrayOutputStream
import java.time.Instant
import kotlin.test.assertTrue

private const val DEFAULT_TIME_ACCURACY_SEC = 5L

fun constructSampleObservabilityObjectDoc(
name: String = "test object",
id: String = "test-id"
): ObservabilityObjectDoc {
return ObservabilityObjectDoc(
id,
Instant.ofEpochMilli(1638482208790),
Instant.ofEpochMilli(1638482208790),
"test-tenant",
listOf("test-access"),
ObservabilityObjectType.TIMESTAMP,
Timestamp(
name,
"opensearch_dashboards_sample_data_logs",
"timestamp",
"date"
)
)
}

fun constructNotebookRequest(name: String = "test notebook"): String {
return """
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

package org.opensearch.observability.action

import com.fasterxml.jackson.core.JsonParseException
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNull
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import org.opensearch.commons.utils.recreateObject
import org.opensearch.observability.createObjectFromJsonString
import org.opensearch.observability.getJsonString
import org.opensearch.observability.model.ObservabilityObjectType
import org.opensearch.observability.model.Timestamp

internal class CreateObservabilityObjectRequestTests {
private val sampleTimestamp = Timestamp(
"test-timestamp",
"opensearch_dashboards_sample_data_logs",
"timestamp",
"date"
)
private val objectRequest =
CreateObservabilityObjectRequest("test-id", ObservabilityObjectType.TIMESTAMP, sampleTimestamp)

@Test
fun `Create object serialize and deserialize transport object should be equal`() {
val recreatedObject = recreateObject(objectRequest) { CreateObservabilityObjectRequest(it) }
assertNull(recreatedObject.validate())
assertEquals(objectRequest.objectData, recreatedObject.objectData)
}

@Test
fun `Create object serialize and deserialize using json object should be equal`() {
val jsonString = getJsonString(objectRequest)
val recreatedObject = createObjectFromJsonString(jsonString) { CreateObservabilityObjectRequest.parse(it) }
assertEquals(objectRequest.objectData, recreatedObject.objectData)
}

@Test
fun `Create object should deserialize json object using parser`() {
val jsonString =
"{\"timestamp\":{\"name\":\"test-timestamp\",\"index\":\"opensearch_dashboards_sample_data_logs\",\"type\":\"timestamp\",\"dsl_type\":\"date\"}}"
val recreatedObject = createObjectFromJsonString(jsonString) { CreateObservabilityObjectRequest.parse(it) }
assertEquals(sampleTimestamp, recreatedObject.objectData)
}

@Test
fun `Create object should throw exception when invalid json object is passed`() {
val jsonString = "sample message"
assertThrows<JsonParseException> {
createObjectFromJsonString(jsonString) { CreateObservabilityObjectRequest.parse(it) }
}
}

@Test
fun `Create object should safely ignore extra field in json object`() {
val jsonString =
"{\"timestamp\":{\"name\":\"test-timestamp\",\"index\":\"opensearch_dashboards_sample_data_logs\",\"type\":\"timestamp\",\"dsl_type\":\"date\",\"another\":\"field\"}}"
val recreatedObject = createObjectFromJsonString(jsonString) { CreateObservabilityObjectRequest.parse(it) }
assertEquals(sampleTimestamp, recreatedObject.objectData)
}
}
Loading