This is an automated email from the ASF dual-hosted git repository.
sergeykamov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/master by this push:
new dac5cd1 REST logger fixed.
dac5cd1 is described below
commit dac5cd13517ddf8ccf60d71f51ecf4c87bef6540
Author: Sergey Kamov <[email protected]>
AuthorDate: Fri Apr 16 21:56:41 2021 +0300
REST logger fixed.
---
.../apache/nlpcraft/common/debug/NCLogHolder.scala | 17 ++-
.../nlpcraft/probe/mgrs/cmd/NCCommandManager.scala | 2 +-
.../probe/mgrs/nlp/NCProbeEnrichmentManager.scala | 18 +--
.../nlpcraft/server/mdo/NCQueryStateMdo.scala | 2 +-
.../nlpcraft/server/probe/NCProbeManager.scala | 12 +-
.../nlpcraft/server/query/NCQueryManager.scala | 42 +++---
.../nlpcraft/server/rest/NCBasicRestApi.scala | 6 +-
.../apache/nlpcraft/common/debug/NCLogSpec.scala | 159 +++++++++++++++++++++
.../apache/nlpcraft/model/meta/NCMetaSpec.scala | 81 +----------
.../{NCMetaSpec.scala => NCMetaSpecAdapter.scala} | 74 ++--------
.../apache/nlpcraft/server/rest/NCRestSpec.scala | 2 +-
11 files changed, 227 insertions(+), 188 deletions(-)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/debug/NCLogHolder.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/debug/NCLogHolder.scala
index 1131c3a..f630229 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/debug/NCLogHolder.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/debug/NCLogHolder.scala
@@ -36,8 +36,9 @@ import org.apache.nlpcraft.common.debug.NCLogHolder._
* Log data holder.
*/
class NCLogHolder extends Serializable {
- private val intents = new util.ArrayList[IntentJson]()
- private var queryContext: ContextJson = _
+ // Level set for test reasons.
+ private[debug] val intents = new util.ArrayList[IntentJson]()
+ private[debug] var queryContext: ContextJson = _
case class TokenJson(
metadata: util.Map[String, Object],
@@ -48,7 +49,7 @@ class NCLogHolder extends Serializable {
groups: util.List[String]
)
- case class UserJson( // TODO: add metadata
+ case class UserJson(
id: Long,
firstName: String,
lastName: String,
@@ -56,10 +57,10 @@ class NCLogHolder extends Serializable {
avatarUrl: String,
isAdmin: Boolean,
signupTimestamp: Long,
- meta: JavaMeta // TODO: remove.
+ meta: JavaMeta
)
- case class CompanyJson( // TODO: add metadata
+ case class CompanyJson(
id: Long,
name: String,
website: String,
@@ -67,7 +68,8 @@ class NCLogHolder extends Serializable {
city: String,
region: String,
postalCode: String,
- address: String
+ address: String,
+ meta: JavaMeta
)
case class RequestJson(
@@ -171,7 +173,8 @@ class NCLogHolder extends Serializable {
region = comp.getRegion.orElse(null),
address = comp.getAddress.orElse(null),
city = comp.getCity.orElse(null),
- postalCode = comp.getPostalCode.orElse(null)
+ postalCode = comp.getPostalCode.orElse(null),
+ meta = comp.getMetadata
)
val reqJs = RequestJson(
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/cmd/NCCommandManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/cmd/NCCommandManager.scala
index 4206a11..9831e94 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/cmd/NCCommandManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/cmd/NCCommandManager.scala
@@ -101,7 +101,7 @@ object NCCommandManager extends NCService {
usrId = msg.data[Long]("userId"),
senMeta = msg.data[java.util.Map[String,
JSerializable]]("senMeta").asScala,
mdlId = msg.data[String]("mdlId"),
- logEnable = msg.data[Boolean]("logEnable"),
+ enableLog = msg.data[Boolean]("enableLog"),
span
)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
index aab00ed..8b9258b 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
@@ -144,7 +144,7 @@ object NCProbeEnrichmentManager extends NCService with
NCOpenCensusModelStats {
* @param usrId User ID.
* @param senMeta Sentence meta data.
* @param mdlId Model ID.
- * @param logEnable Log enabled flag.
+ * @param enableLog Log enabled flag.
* @param parent Optional parent span.
*/
@throws[NCE]
@@ -155,7 +155,7 @@ object NCProbeEnrichmentManager extends NCService with
NCOpenCensusModelStats {
usrId: Long,
senMeta: Map[String, Serializable],
mdlId: String,
- logEnable: Boolean,
+ enableLog: Boolean,
parent: Span = null
): Unit = {
val span = startSpan("ask", parent,
@@ -166,7 +166,7 @@ object NCProbeEnrichmentManager extends NCService with
NCOpenCensusModelStats {
)
startMs.set(System.currentTimeMillis())
-
+
try
ask0(
srvReqId,
@@ -175,7 +175,7 @@ object NCProbeEnrichmentManager extends NCService with
NCOpenCensusModelStats {
usrId,
senMeta,
mdlId,
- logEnable,
+ enableLog,
span
)
catch {
@@ -213,7 +213,7 @@ object NCProbeEnrichmentManager extends NCService with
NCOpenCensusModelStats {
* @param usrId User ID.
* @param senMeta Sentence meta data.
* @param mdlId Model ID.
- * @param logEnable Log enable flag.
+ * @param enableLog Log enable flag.
*/
@throws[NCE]
private def ask0(
@@ -223,7 +223,7 @@ object NCProbeEnrichmentManager extends NCService with
NCOpenCensusModelStats {
usrId: Long,
senMeta: Map[String, Serializable],
mdlId: String,
- logEnable: Boolean,
+ enableLog: Boolean,
span: Span
): Unit = {
require(nlpSens.nonEmpty)
@@ -248,7 +248,7 @@ object NCProbeEnrichmentManager extends NCService with
NCOpenCensusModelStats {
tbl += (s"${b("Server Request ID")}", m(srvReqId))
logger.info(s"New request received from server:\n$tbl")
-
+
/**
*
* @param code Pre or post checker error code.
@@ -337,7 +337,7 @@ object NCProbeEnrichmentManager extends NCService with
NCOpenCensusModelStats {
NCConnectionManager.send(msg, span)
val durMs = System.currentTimeMillis() - startMs.get
-
+
if (errMsg.isEmpty)
logger.info(s"" +
s"\n" +
@@ -580,7 +580,7 @@ object NCProbeEnrichmentManager extends NCService with
NCOpenCensusModelStats {
conv.updateTokens(span)
var logKey: String = null
- val logHldr = if (logEnable) new NCLogHolder else null
+ val logHldr = if (enableLog) new NCLogHolder else null
// Create model query context.
val ctx: NCContext = new NCContext {
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/mdo/NCQueryStateMdo.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/mdo/NCQueryStateMdo.scala
index 7419aed..27f440a 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/mdo/NCQueryStateMdo.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/mdo/NCQueryStateMdo.scala
@@ -39,7 +39,7 @@ case class NCQueryStateMdo(
@NCMdoField createTstamp: Timestamp, // Creation timestamp.
@NCMdoField var updateTstamp: Timestamp, // Last update timestamp.
@NCMdoField var status: String,
- @NCMdoField enabledLog: Boolean,
+ @NCMdoField enableLog: Boolean,
@NCMdoField var logJson: Option[String] = None,
@NCMdoField var intentId: Option[String] = None,
// Query OK.
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
index 36c1385..34b654b 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
@@ -835,7 +835,7 @@ object NCProbeManager extends NCService {
* @param data
* @param usrMeta
* @param companyMeta
- * @param logEnable
+ * @param enableLog
* @param parent
*/
@throws[NCE]
@@ -851,7 +851,7 @@ object NCProbeManager extends NCService {
data: Option[String],
usrMeta: Option[Map[String, String]],
companyMeta: Option[Map[String, String]],
- logEnable: Boolean,
+ enableLog: Boolean,
parent: Span = null): Unit = {
startScopedSpan("askProbe", parent, "srvReqId" → srvReqId, "usrId" →
usr.id, "mdlId" → mdlId, "txt" → txt) { span ⇒
def convertMeta(metaOpt: Option[Map[String, String]]):
util.HashMap[String, String] =
@@ -860,13 +860,13 @@ object NCProbeManager extends NCService {
val map = new util.HashMap[String, String]()
meta.foreach { case (k, v) ⇒ map.put(k, v) }
-
+
map
case None ⇒ null
}
val senMeta = new util.HashMap[String, java.io.Serializable]()
-
+
Map(
"NORMTEXT" → nlpSen.text,
"USER_AGENT" → usrAgent.orNull,
@@ -893,7 +893,7 @@ object NCProbeManager extends NCService {
).
filter(_._2 != null).
foreach(p ⇒ senMeta.put(p._1,
p._2.asInstanceOf[java.io.Serializable]))
-
+
getProbeForModelId(mdlId) match {
case Some(holder) ⇒
sendToProbe(
@@ -907,7 +907,7 @@ object NCProbeManager extends NCService {
"senMeta" → senMeta,
"userId" → usr.id,
"mdlId" → mdlId,
- "logEnable" → logEnable
+ "enableLog" → enableLog
),
span
)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
index 572ecfb..ad6fdb1 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
@@ -112,7 +112,7 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
* @param usrAgent
* @param rmtAddr
* @param data
- * @param enabledLog
+ * @param enableLog
* @return
*/
@throws[NCE]
@@ -123,25 +123,25 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
usrAgent: Option[String],
rmtAddr: Option[String],
data: Option[String],
- enabledLog: Boolean,
+ enableLog: Boolean,
parent: Span = null
): Future[NCQueryStateMdo] = {
val srvReqId = U.genGuid()
-
+
startScopedSpan("syncAsk", parent,
"srvReqId" → srvReqId,
"usrId" → usrId,
"txt" → txt,
"mdlId" → mdlId,
- "enableLog" → enabledLog,
+ "enableLog" → enableLog,
"usrAgent" → usrAgent.orNull,
"rmtAddr" → rmtAddr.orNull
) { span ⇒
val promise = Promise[NCQueryStateMdo]()
-
+
asyncAsks.put(srvReqId, promise)
-
- spawnAskFuture(srvReqId, usrId, txt, mdlId, usrAgent, rmtAddr,
data, enabledLog, span)
+
+ spawnAskFuture(srvReqId, usrId, txt, mdlId, usrAgent, rmtAddr,
data, enableLog, span)
promise.future
}
@@ -156,7 +156,7 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
* @param usrAgent
* @param rmtAddr
* @param data
- * @param enabledLog
+ * @param enableLog
* @return Server request ID for newly submitted request.
*/
@throws[NCE]
@@ -167,7 +167,7 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
usrAgent: Option[String],
rmtAddr: Option[String],
data: Option[String],
- enabledLog: Boolean,
+ enableLog: Boolean,
parent: Span = null
): String = {
val srvReqId = U.genGuid()
@@ -177,10 +177,10 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
"usrId" → usrId,
"txt" → txt,
"mdlId" → mdlId,
- "enableLog" → enabledLog,
+ "enableLog" → enableLog,
"usrAgent" → usrAgent.orNull,
"rmtAddr" → rmtAddr.orNull) { span ⇒
- spawnAskFuture(srvReqId, usrId, txt, mdlId, usrAgent, rmtAddr,
data, enabledLog, span)
+ spawnAskFuture(srvReqId, usrId, txt, mdlId, usrAgent, rmtAddr,
data, enableLog, span)
srvReqId
}
@@ -199,7 +199,7 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
* @param usrAgent
* @param rmtAddr
* @param data
- * @param enabledLog
+ * @param enableLog
* @return
*/
@throws[NCE]
@@ -211,13 +211,13 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
usrAgent: Option[String],
rmtAddr: Option[String],
data: Option[String],
- enabledLog: Boolean,
+ enableLog: Boolean,
parent: Span = null
): Unit = {
val txt0 = txt.trim()
-
+
val rcvTstamp = U.nowUtcTs()
-
+
val usr = NCUserManager.getUserById(usrId, parent).getOrElse(throw new
NCE(s"Unknown user ID: $usrId"))
val company = NCCompanyManager.getCompany(usr.companyId,
parent).getOrElse(throw new NCE(s"Unknown company ID: ${usr.companyId}"))
@@ -236,7 +236,7 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
// Check input length.
if (txt0.split(" ").length > MAX_WORDS)
throw new NCE(s"User input is too long (max is $MAX_WORDS words).")
-
+
catching(wrapIE) {
// Enlist for tracking.
cache += srvReqId → NCQueryStateMdo(
@@ -246,7 +246,7 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
companyId = company.id,
email = usr.email,
status = QRY_ENLISTED, // Initial status.
- enabledLog = enabledLog,
+ enableLog = enableLog,
text = txt0,
userAgent = usrAgent,
remoteAddress = rmtAddr,
@@ -254,7 +254,7 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
updateTstamp = rcvTstamp
)
}
-
+
// Add processing log.
NCProcessLogManager.newEntry(
usrId,
@@ -268,7 +268,7 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
data.orNull,
parent
)
-
+
Future {
startScopedSpan("future", parent, "srvReqId" → srvReqId) { span ⇒
val tbl = NCAsciiTable()
@@ -284,7 +284,7 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
logger.info(s"New request received:\n$tbl")
val enabledBuiltInToks = NCProbeManager.getModel(mdlId,
span).enabledBuiltInTokens
-
+
// Enrich the user input and send it to the probe.
NCProbeManager.askProbe(
srvReqId,
@@ -298,7 +298,7 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
data,
usrMeta,
compMeta,
- enabledLog,
+ enableLog,
span
)
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
index bfd8d2a..a681a8f 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
@@ -91,7 +91,7 @@ class NCBasicRestApi extends NCRestApi with LazyLogging with
NCOpenCensusTrace w
usrAgent: Option[String],
rmtAddr: Option[String],
data: Option[String],
- enabledLog: Boolean,
+ enableLog: Boolean,
parent: Span
)
@@ -603,7 +603,7 @@ class NCBasicRestApi extends NCRestApi with LazyLogging
with NCOpenCensusTrace w
h.usrAgent,
h.rmtAddr,
h.data,
- h.enabledLog,
+ h.enableLog,
h.parent
)
@@ -634,7 +634,7 @@ class NCBasicRestApi extends NCRestApi with LazyLogging
with NCOpenCensusTrace w
h.usrAgent,
h.rmtAddr,
h.data,
- h.enabledLog,
+ h.enableLog,
h.parent
)
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/debug/NCLogSpec.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/debug/NCLogSpec.scala
new file mode 100644
index 0000000..8bfd78c
--- /dev/null
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/debug/NCLogSpec.scala
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.nlpcraft.common.debug
+
+import com.google.gson.reflect.TypeToken
+import com.google.gson.{GsonBuilder, JsonElement}
+import org.apache.http.HttpResponse
+import org.apache.http.client.methods.HttpPost
+import org.apache.http.entity.StringEntity
+import org.apache.http.impl.client.HttpClients
+import org.apache.http.util.EntityUtils
+import org.apache.nlpcraft.NCTestEnvironment
+import org.apache.nlpcraft.common.JavaMeta
+import org.apache.nlpcraft.model.meta.NCMetaSpecAdapter
+import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder._
+import org.apache.nlpcraft.model.{NCIntent, NCIntentMatch, NCModelAdapter,
NCResult}
+import org.junit.jupiter.api.Test
+
+import java.lang.Boolean.TRUE
+import java.lang.reflect.Type
+import java.util
+import scala.collection.JavaConverters._
+import scala.language.implicitConversions
+
+object NCLogSpecModel {
+ val MDL_ID = "nlpcraft.any.model.test"
+ val RESULT = "OK"
+}
+
+import org.apache.nlpcraft.common.debug.NCLogSpecModel._
+
+/**
+ */
+class NCLogSpecModel extends NCModelAdapter(MDL_ID, "IDL Test Model", "1.0") {
+ @NCIntent("intent=i term(a)={tok_id()=='nlpcraft:nlp'}")
+ private def callback(ctx: NCIntentMatch): NCResult = NCResult.text(RESULT)
+}
+
+/**
+ * Log test.
+ */
+@NCTestEnvironment(model = classOf[NCLogSpecModel], startClient = false)
+class NCLogSpec extends NCMetaSpecAdapter {
+ private val CLIENT = HttpClients.createDefault
+ private val GSON = new GsonBuilder().setPrettyPrinting().create
+ private val TYPE_RESP = new TypeToken[util.HashMap[String, AnyRef]]()
{}.getType
+ private val TYPE_LOG = new TypeToken[NCLogHolder]() {}.getType
+
+ private def postHttp(url: String, params: (String, AnyRef)*): String = {
+ val post = new HttpPost(DFLT_BASEURL + url)
+
+ try {
+ post.setHeader("Content-Type", "application/json")
+ post.setEntity(new StringEntity(GSON.toJson(params.toMap.asJava),
"UTF-8"))
+
+ CLIENT.execute(
+ post,
+ (resp: HttpResponse) ⇒ {
+ val code = resp.getStatusLine.getStatusCode
+ val entity = resp.getEntity
+
+ code match {
+ case 200 ⇒ EntityUtils.toString(entity)
+ case _ ⇒ throw new Exception(s"Unexpected response
[code=$code, entity=$entity]")
+ }
+ }
+ )
+ }
+ finally
+ post.releaseConnection()
+ }
+
+ private def extract[T](js: JsonElement, t: Type): T = GSON.fromJson(js, t)
+ private def getField[T](m: util.Map[String, AnyRef], fn: String): T =
m.get(fn).asInstanceOf[T]
+
+ private def ask(txt: String): Map[String, Any] = {
+ require(tkn != null)
+
+ val res: java.util.HashMap[String, Any] = extract(
+ GSON.toJsonTree(
+ getField(
+ GSON.fromJson(
+ postHttp("ask/sync", "acsTok" → tkn, "txt" → txt,
"mdlId" → MDL_ID, "enableLog" → TRUE),
+ TYPE_RESP
+ ),
+ "state"
+ )
+ ),
+ classOf[java.util.HashMap[String, Any]]
+ )
+
+ val m = res.asScala.toMap
+
+ require(m("resBody") == RESULT, s"Unexpected result: ${m("resBody")}")
+
+ m
+ }
+
+ private def check(meta: MetaHolder): Unit = {
+ val data = ask("test")
+
+ val log: NCLogHolder =
+
GSON.fromJson(GSON.toJson(data("logHolder").asInstanceOf[JavaMeta]), TYPE_LOG)
+
+ val ctx = log.queryContext
+
+ println(s"Company meta=${ctx.request.company.meta}")
+ println(s"User meta=${ctx.request.user.meta}")
+
+ def norm(m: JavaMeta): JavaMeta = if (m != null && m.isEmpty) null
else m
+
+ require(
+ norm(ctx.request.company.meta) == norm(meta.companyMeta),
+ s"Unexpected company meta [expected=${meta.companyMeta},
meta=${ctx.request.company.meta}"
+ )
+ require(
+ norm(ctx.request.user.meta) == norm(meta.userMeta),
+ s"Unexpected user meta [expected=${meta.userMeta},
meta=${ctx.request.user.meta}"
+ )
+ }
+
+ @Test
+ def testLogMeta(): Unit = {
+ val meta = getMeta()
+
+ try {
+ check(meta)
+
+ def mkMeta(k: String, v: Object): JavaMeta = Map(k → v).asJava
+
+ val newMeta = MetaHolder(userMeta = mkMeta("userKey", "v1"),
companyMeta = mkMeta("compKey", "v2"))
+
+ setMeta(newMeta)
+
+ check(newMeta)
+ }
+ finally {
+ setMeta(meta)
+
+ check(meta)
+ }
+ }
+}
+
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/meta/NCMetaSpec.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/meta/NCMetaSpec.scala
index b851629..a1b4e2c 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/meta/NCMetaSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/meta/NCMetaSpec.scala
@@ -19,7 +19,6 @@ package org.apache.nlpcraft.model.meta
import org.apache.nlpcraft.model.`abstract`.NCAbstractTokensModel
import org.apache.nlpcraft.model.{NCElement, NCIntent, NCIntentMatch, NCResult}
-import org.apache.nlpcraft.server.rest.NCRestSpec
import org.apache.nlpcraft.{NCTestElement, NCTestEnvironment}
import org.junit.jupiter.api.Test
@@ -46,90 +45,20 @@ class NcMetaModel extends NCAbstractTokensModel {
}
@NCTestEnvironment(model = classOf[NcMetaModel], startClient = true)
-class NCMetaSpec extends NCRestSpec {
- type Meta = java.util.Map[String, String]
- case class MetaHolder(userMeta: Meta, companyMeta: Meta)
-
- private def get(): MetaHolder = {
- var userMeta: Meta = null
- var companyMeta: Meta = null
-
- post("user/get")(
- ("$.properties", (props: java.util.Map[String, String]) ⇒ userMeta
= props)
- )
-
- post("company/get")(
- ("$.properties", (props: java.util.Map[String, String]) ⇒
companyMeta = props)
- )
-
- MetaHolder(userMeta, companyMeta)
- }
-
- private def runTest(h: MetaHolder): Unit = {
- def convert(m: Meta): Meta = if (m == null)
util.Collections.emptyMap() else m
-
- // 1. We have to save all existing company's fields for following
updates.
- var compName: String = null
- var compWebsite: String = null
- var compCountry: String = null
- var compRegion: String = null
- var compCity: String = null
- var compAddress: String = null
- var compPostalCode: String = null
-
- post("company/get")(
- ("$.name", (v: String) ⇒ compName = v),
- ("$.website", (v: String) ⇒ compWebsite = v),
- ("$.country", (v: String) ⇒ compCountry = v),
- ("$.region", (v: String) ⇒ compRegion = v),
- ("$.city", (v: String) ⇒ compCity = v),
- ("$.address", (v: String) ⇒ compAddress = v),
- ("$.postalCode", (v: String) ⇒ compPostalCode = v)
- )
-
- post("company/update",
- "name" → compName,
- "website" → compWebsite,
- "country" → compCountry,
- "region" → compRegion,
- "city" → compCity,
- "address" → compAddress,
- "postalCode" → compPostalCode,
- "properties" → convert(h.companyMeta)
- )()
-
- // 2. We have to save all existing user's fields for following updates.
- var usrFirstName: String = null
- var usrLastName: String = null
- var usrAvatarUrl: String = null
-
- post("user/get")(
- ("$.firstName", (v: String) ⇒ usrFirstName = v),
- ("$.lastName", (v: String) ⇒ usrLastName = v),
- ("$.avatarUrl", (v: String) ⇒ usrAvatarUrl = v)
- )
-
- post("user/update",
- "firstName" → usrFirstName,
- "lastName" → usrLastName,
- "avatarUrl" → usrAvatarUrl,
- "properties" → convert(h.userMeta)
- )()
- }
-
+class NCMetaSpec extends NCMetaSpecAdapter {
@Test
def testWithoutMeta(): Unit = require(getClient.ask("a").isFailed)
@Test
def testWithMeta(): Unit = {
- val currUserCompMeta = get()
+ val currUserCompMeta = getMeta()
val sys = new SystemProperties
- val m = Map("k1" → "v1").asJava
+ val m = Map("k1" → "v1".asInstanceOf[Object]).asJava
try {
// Sets company and user metadata.
- runTest(MetaHolder(m, m))
+ setMeta(MetaHolder(m, m))
// It is not enough.
require(getClient.ask("a").isFailed)
@@ -143,7 +72,7 @@ class NCMetaSpec extends NCRestSpec {
finally {
sys.remove("k1")
- runTest(currUserCompMeta)
+ setMeta(currUserCompMeta)
}
}
}
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/meta/NCMetaSpec.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/meta/NCMetaSpecAdapter.scala
similarity index 56%
copy from
nlpcraft/src/test/scala/org/apache/nlpcraft/model/meta/NCMetaSpec.scala
copy to
nlpcraft/src/test/scala/org/apache/nlpcraft/model/meta/NCMetaSpecAdapter.scala
index b851629..d378bd3 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/meta/NCMetaSpec.scala
+++
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/meta/NCMetaSpecAdapter.scala
@@ -17,56 +17,34 @@
package org.apache.nlpcraft.model.meta
-import org.apache.nlpcraft.model.`abstract`.NCAbstractTokensModel
-import org.apache.nlpcraft.model.{NCElement, NCIntent, NCIntentMatch, NCResult}
+import org.apache.nlpcraft.common.JavaMeta
import org.apache.nlpcraft.server.rest.NCRestSpec
-import org.apache.nlpcraft.{NCTestElement, NCTestEnvironment}
-import org.junit.jupiter.api.Test
import java.util
-import scala.collection.JavaConverters._
-import scala.sys.SystemProperties
/**
- * Model for test following meta usage: company, user and system.
+ * This test adapter provides user and company metadata manipulations methods.
*/
-class NcMetaModel extends NCAbstractTokensModel {
- override def getElements: util.Set[NCElement] = Set(NCTestElement("a",
"a"))
+abstract class NCMetaSpecAdapter extends NCRestSpec {
+ case class MetaHolder(userMeta: JavaMeta, companyMeta: JavaMeta)
- @NCIntent(
- "intent=i " +
- " term(t)={" +
- " tok_id() == 'a' && " +
- " meta_user('k1') == 'v1' && " +
- " meta_company('k1') == 'v1' && " +
- " meta_sys('k1') == 'v1'" +
- " }"
- )
- def onIntent(ctx: NCIntentMatch): NCResult = NCResult.text("OK")
-}
-
-@NCTestEnvironment(model = classOf[NcMetaModel], startClient = true)
-class NCMetaSpec extends NCRestSpec {
- type Meta = java.util.Map[String, String]
- case class MetaHolder(userMeta: Meta, companyMeta: Meta)
-
- private def get(): MetaHolder = {
- var userMeta: Meta = null
- var companyMeta: Meta = null
+ protected def getMeta(): MetaHolder = {
+ var userMeta: JavaMeta = null
+ var companyMeta: JavaMeta = null
post("user/get")(
- ("$.properties", (props: java.util.Map[String, String]) ⇒ userMeta
= props)
+ ("$.properties", (props: JavaMeta) ⇒ userMeta = props)
)
post("company/get")(
- ("$.properties", (props: java.util.Map[String, String]) ⇒
companyMeta = props)
+ ("$.properties", (props: JavaMeta) ⇒ companyMeta = props)
)
MetaHolder(userMeta, companyMeta)
}
- private def runTest(h: MetaHolder): Unit = {
- def convert(m: Meta): Meta = if (m == null)
util.Collections.emptyMap() else m
+ protected def setMeta(h: MetaHolder): Unit = {
+ def convert(m: JavaMeta): JavaMeta = if (m == null)
util.Collections.emptyMap() else m
// 1. We have to save all existing company's fields for following
updates.
var compName: String = null
@@ -116,34 +94,4 @@ class NCMetaSpec extends NCRestSpec {
"properties" → convert(h.userMeta)
)()
}
-
- @Test
- def testWithoutMeta(): Unit = require(getClient.ask("a").isFailed)
-
- @Test
- def testWithMeta(): Unit = {
- val currUserCompMeta = get()
- val sys = new SystemProperties
-
- val m = Map("k1" → "v1").asJava
-
- try {
- // Sets company and user metadata.
- runTest(MetaHolder(m, m))
-
- // It is not enough.
- require(getClient.ask("a").isFailed)
-
- // Sets sys metadata.
- sys.put("k1", "v1")
-
- // Ok.
- require(getClient.ask("a").isOk)
- }
- finally {
- sys.remove("k1")
-
- runTest(currUserCompMeta)
- }
- }
}
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestSpec.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestSpec.scala
index 47b6f95..9aaba98 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestSpec.scala
@@ -127,7 +127,7 @@ class NCRestSpec extends NCTestContext {
type ResponseList = java.util.List[ResponseContent]
type JList[T] = java.util.List[T]
- private var tkn: String = _
+ protected var tkn: String = _
/**
*