You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by md...@apache.org on 2015/10/15 22:16:53 UTC
usergrid git commit: USERGRID-1044: fix direct access on query failure
Repository: usergrid
Updated Branches:
refs/heads/USERGRID-1044 2757e905d -> 9e8138107
USERGRID-1044: fix direct access on query failure
and log when name/uuid error/mismatch in payload occurs
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/9e813810
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/9e813810
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/9e813810
Branch: refs/heads/USERGRID-1044
Commit: 9e813810756a1b48a23b1bac4d7cec6bc326f186
Parents: 2757e90
Author: Mike Dunker <md...@apigee.com>
Authored: Thu Oct 15 13:16:04 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Thu Oct 15 13:16:04 2015 -0700
----------------------------------------------------------------------
.../apache/usergrid/helpers/Extractors.scala | 18 ++++-
.../usergrid/scenarios/AuditScenarios.scala | 84 +++++++++++++++-----
.../scenarios/EntityCollectionScenarios.scala | 6 +-
.../org/apache/usergrid/settings/Settings.scala | 19 +++++
4 files changed, 100 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/9e813810/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
index 8a18053..136a561 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
@@ -41,9 +41,9 @@ object Extractors {
}
/**
- * Will extract the uuid from the create response. If the uuid is not present, an empty string will be set
+ * Will extract the uuid from the response. If the uuid is not present, an empty string will be set
*/
- def extractCreateUuid(saveAsName: String) = {
+ def extractEntityUuid(saveAsName: String) = {
jsonPath("$.entities[0].uuid").transformOption(extract => {
//it may or may not be present. If it is, save it, otherwise save it as an empty string
extract.orElse(Some(""))
@@ -51,9 +51,19 @@ object Extractors {
}
/**
- * Will extract the modified date from the create response. If the modified field is not present, -1 will be set
+ * Will extract the name from the response. If the name is not present, an empty string will be set
*/
- def extractCreateModified(saveAsName: String) = {
+ def extractEntityName(saveAsName: String) = {
+ jsonPath("$.entities[0].name").transformOption(extract => {
+ //it may or may not be present. If it is, save it, otherwise save it as an empty string
+ extract.orElse(Some(""))
+ }).saveAs(saveAsName)
+ }
+
+ /**
+ * Will extract the modified date from the response. If the modified field is not present, -1 will be set
+ */
+ def extractEntityModified(saveAsName: String) = {
jsonPath("$.entities[0].modified").ofType[Long].transformOption(extract => {
//it may or may not be present. If it is, save it, otherwise save it as -1
extract.orElse(Some(-1))
http://git-wip-us.apache.org/repos/asf/usergrid/blob/9e813810/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala
index 905c652..0b798a8 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala
@@ -32,7 +32,8 @@ object AuditScenarios {
//The value for the cursor
val SessionVarCursor: String = "cursor"
- val SessionVarUuid: String = "entityUuid"
+ val SessionVarEntityUuid: String = "entityUuid"
+ val SessionVarEntityName: String = "entityName"
val SessionVarDeletedUuid: String = "deletedUuid"
val SessionVarCollectionName: String = "collectionName"
val SessionVarCollectionEntities: String = "collectionEntities"
@@ -117,7 +118,7 @@ object AuditScenarios {
http("DELETE audited entity")
.delete("/${collectionName}/${uuid}")
.headers(Headers.authToken)
- .check(extractCreateUuid(SessionVarDeletedUuid)))
+ .check(extractEntityUuid(SessionVarDeletedUuid)))
.exec(session => {
val uuid = session(SessionVarDeletedUuid).as[String]
@@ -136,28 +137,50 @@ object AuditScenarios {
.get("/${collectionName}/${uuid}")
.headers(Headers.authToken)
.headers(Headers.auditRegionHeaders)
- .check(status.is(200),jsonPath("$.count").optional.saveAs("count"),extractAuditEntities(SessionVarCollectionEntities)))
+ .check()
+ .check(status.in(Seq(200,404)),extractAuditEntities(SessionVarCollectionEntities),
+ extractEntityUuid(SessionVarEntityUuid),extractEntityName(SessionVarEntityName)))
.exec(session => {
- val count = session("count").as[String].toInt
val uuid = session("uuid").as[String]
- val entityName = session("name").as[String]
+ val reqName = session("name").as[String]
val modified = session("modified").as[String].toLong
val collectionName = session(SessionVarCollectionName).as[String]
+ val collectionEntities = session(SessionVarCollectionEntities).as[Seq[Any])
+ val entityUuid = session(SessionVarEntityUuid).as[String]
+ val entityName = session(SessionVarEntityName).as[String]
+ val count = collectionEntities.length
if (count < 1) {
- Settings.addAuditUuid(uuid, collectionName, entityName, modified)
+ Settings.addAuditUuid(uuid, collectionName, reqName, modified)
Settings.incAuditNotFoundAtAll()
- println(s"NOT FOUND AT ALL: $collectionName.$entityName ($uuid)")
- } else if (count == 1) {
- // found via direct access but not query
- Settings.addAuditUuid(uuid, collectionName, entityName, modified)
- Settings.incAuditNotFoundViaQuery()
- println(s"NOT FOUND VIA QUERY: $collectionName.$entityName ($uuid)")
- } else {
- // count > 1 -> invalid
- Settings.addAuditUuid(uuid, collectionName, entityName, modified)
+ println(s"NOT FOUND AT ALL: $collectionName.$reqName ($uuid)")
+ } else if (count > 1) {
+ // invalid
+ Settings.addAuditUuid(uuid, collectionName, reqName, modified)
Settings.incAuditBadResponse()
- println(s"INVALID RESPONSE (count=$count): $collectionName.$entityName ($uuid)")
+ println(s"INVALID RESPONSE (count=$count): $collectionName.$reqName ($uuid)")
+ } else {
+ // count == 1 -> found via direct access but not query
+
+ // will count as found directly even if there is a uuid or name mismatch
+ if (entityUuid == null || entityUuid.isEmpty) {
+ Settings.incAuditPayloadUuidError()
+ println(s"PAYLOAD UUID MISSING (DIRECT): requestedUuid=$uuid")
+ } else if (uuid.equalsIgnoreCase(entityUuid)) {
+ Settings.incAuditPayloadUuidError()
+ println(s"PAYLOAD UUID MISMATCH (DIRECT): requestedUuid=$uuid returnedUuid=$entityUuid")
+ }
+ if (entityName == null || entityName.isEmpty) {
+ Settings.incAuditPayloadNameError()
+ println(s"PAYLOAD NAME MISSING (DIRECT): requestedName=$reqName")
+ } else if (reqName.equalsIgnoreCase(entityName)) {
+ Settings.incAuditPayloadNameError()
+ println(s"PAYLOAD NAME MISMATCH (DIRECT): requestedName=$reqName returnedName=$entityName")
+ }
+
+ Settings.addAuditUuid(uuid, collectionName, reqName, modified)
+ Settings.incAuditNotFoundViaQuery()
+ println(s"NOT FOUND VIA QUERY: $collectionName.$reqName ($uuid)")
}
session
@@ -168,23 +191,44 @@ object AuditScenarios {
.get("/${collectionName}?ql=uuid=${uuid}")
.headers(Headers.authToken)
.headers(Headers.auditRegionHeaders)
- .check(status.is(200),jsonPath("$.count").optional.saveAs("count"),extractAuditEntities(SessionVarCollectionEntities)))
+ .check(status.is(200),jsonPath("$.count").optional.saveAs("count"),
+ extractAuditEntities(SessionVarCollectionEntities),
+ extractEntityUuid(SessionVarEntityUuid),extractEntityName(SessionVarEntityName)))
.exec(session => {
val count = session("count").as[String].toInt
val uuid = session("uuid").as[String]
- val entityName = session("name").as[String]
+ val reqName = session("name").as[String]
val modified = session("modified").as[String].toLong
val collectionName = session(SessionVarCollectionName).as[String]
+ val entityUuid = session(SessionVarEntityUuid).as[String]
+ val entityName = session(SessionVarEntityName).as[String]
if (count < 1) {
// will check to see whether accessible directly
} else if (count > 1) {
- Settings.addAuditUuid(uuid, collectionName, entityName, modified)
+ Settings.addAuditUuid(uuid, collectionName, reqName, modified)
Settings.incAuditBadResponse()
- println(s"INVALID RESPONSE (count=$count): $collectionName.$entityName ($uuid)")
+ println(s"INVALID RESPONSE (count=$count): $collectionName.$reqName ($uuid)")
} else {
// count == 1 -> success
// println(s"FOUND: $collectionName.$entityName ($uuid)")
+
+ // will count as success even if there is a uuid or name mismatch
+ if (entityUuid == null || entityUuid.isEmpty) {
+ Settings.incAuditPayloadUuidError()
+ println(s"PAYLOAD UUID MISSING (QUERY): requestedUuid=$uuid")
+ } else if (uuid.equalsIgnoreCase(entityUuid)) {
+ Settings.incAuditPayloadUuidError()
+ println(s"PAYLOAD UUID MISMATCH (QUERY): requestedUuid=$uuid returnedUuid=$entityUuid")
+ }
+ if (entityName == null || entityName.isEmpty) {
+ Settings.incAuditPayloadNameError()
+ println(s"PAYLOAD NAME MISSING (QUERY): requestedName=$reqName")
+ } else if (reqName.equalsIgnoreCase(entityName)) {
+ Settings.incAuditPayloadNameError()
+ println(s"PAYLOAD NAME MISMATCH (QUERY): requestedName=$reqName returnedName=$entityName")
+ }
+
Settings.incAuditSuccess()
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/9e813810/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
index 1b15103..de95920 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
@@ -209,7 +209,7 @@ object EntityCollectionScenarios {
.headers(Headers.authToken)
.body(StringBody("""${entity}"""))
// 200 for success, 400 if already exists
- .check(status.in(Seq(200)), extractCreateUuid(SessionVarUuid), extractCreateModified(SessionVarModified)))
+ .check(status.in(Seq(200)), extractEntityUuid(SessionVarUuid), extractEntityModified(SessionVarModified)))
.exec(session => {
val uuid = session(SessionVarUuid).as[String]
val entityName = session("entityName").as[String]
@@ -299,7 +299,7 @@ object EntityCollectionScenarios {
.get("/" + Settings.collection + "/${entityName}")
.queryParamMap(Settings.queryParamMap)
.headers(Headers.authAnonymous)
- .check(status.is(200), extractCreateUuid(SessionVarUuid), extractCreateModified(SessionVarModified)))
+ .check(status.is(200), extractEntityUuid(SessionVarUuid), extractEntityModified(SessionVarModified)))
.exec(session => {
val uuid = session(SessionVarUuid).as[String]
val entityName = session("entityName").as[String]
@@ -317,7 +317,7 @@ object EntityCollectionScenarios {
.get("/" + Settings.collection + "/${entityName}")
.queryParamMap(Settings.queryParamMap)
.headers(Headers.authToken)
- .check(status.is(200), extractCreateUuid(SessionVarUuid), extractCreateModified(SessionVarModified)))
+ .check(status.is(200), extractEntityUuid(SessionVarUuid), extractEntityModified(SessionVarModified)))
.exec(session => {
val uuid = session(SessionVarUuid).as[String]
val entityName = session("entityName").as[String]
http://git-wip-us.apache.org/repos/asf/usergrid/blob/9e813810/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index 374440d..b9ba86d 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -432,6 +432,8 @@ object Settings {
private val countAuditNotFoundViaQuery = new AtomicInteger(0)
private val countAuditNotFoundAtAll = new AtomicInteger(0)
private val countAuditBadResponse = new AtomicInteger(0)
+ private val countAuditPayloadUuidError = new AtomicInteger(0)
+ private val countAuditPayloadNameError = new AtomicInteger(0)
private val countAuditEntryDeleteSuccess = new AtomicInteger(0)
private val countAuditEntryDeleteFailure = new AtomicInteger(0)
@@ -451,6 +453,14 @@ object Settings {
countAuditBadResponse.incrementAndGet()
}
+ def incAuditPayloadUuidError(): Unit = {
+ countAuditPayloadUuidError.incrementAndGet()
+ }
+
+ def incAuditPayloadNameError(): Unit = {
+ countAuditPayloadNameError.incrementAndGet()
+ }
+
def incAuditEntryDeleteSuccess(): Unit = {
countAuditEntryDeleteSuccess.incrementAndGet()
}
@@ -465,6 +475,8 @@ object Settings {
val countNotFoundViaQuery = countAuditNotFoundViaQuery.get
val countNotFoundAtAll = countAuditNotFoundAtAll.get
val countBadResponse = countAuditBadResponse.get
+ val countPayloadUuidErrors = countAuditPayloadUuidError.get
+ val countPayloadNameErrors = countAuditPayloadNameError.get
val countDeleteSuccess = countAuditEntryDeleteSuccess.get
val countDeleteFailure = countAuditEntryDeleteFailure.get
val countTotal = countSuccess + countNotFoundViaQuery + countBadResponse
@@ -485,9 +497,16 @@ object Settings {
println(s"Not Found at all: $countNotFoundAtAll")
println(s"Bad Response: $countBadResponse")
if (deleteAfterSuccessfulAudit) {
+ println()
println(s"Delete Successes: $countDeleteSuccess")
println(s"Delete Failures: $countDeleteFailure")
}
+ if (countPayloadUuidErrors > 0 || countPayloadNameErrors > 0) {
+ println()
+ println(s"Payload Mismatches/Errors")
+ println(s" UUID: $countPayloadUuidErrors")
+ println(s" Name: $countPayloadNameErrors")
+ }
println(s"Total: $countTotal")
println()
println(s"Start Timestamp(ms): $testStartTime")