blob: 669f784c4e3d34efb1e9fe0bd84dd0ef3e39a289 [file] [log] [blame]
/*
* 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.ignite.gatling.check
import io.gatling.commons.validation.FailureWrapper
import io.gatling.commons.validation.SuccessWrapper
import io.gatling.commons.validation.Validation
import io.gatling.core.Predef.Session
import io.gatling.core.check.Validator
import io.gatling.core.session.Expression
/**
* Check validation functions common for results obtained both from Ignite Key-Value and SQL APIs.
*/
trait IgniteCheckSupport {
/**
* Implicit conversion from lambda to Validator to support validation as:
* {{{
* ignite(
* sql(cache, "SELECT id, name FROM City WHERE id = ?").args("#{id}")
* check(
* resultSet.findAll.validate((rows: Seq[Row], s: Session) => row.head(1) == "Nsk")
* )
* )
* }}}
*
* @param predicate Predicate validating the result in context of the session.
* @tparam P Type of the prepared operation result.
* @return PredicateValidator.
*/
implicit def predicateToValidator[P](predicate: (P, Session) => Boolean): Expression[Validator[P]] = s =>
new PredicateValidator[P](predicate, s).success
/**
* Validator calling the provided predicate function to validate the operation result.
*
* @param predicate Predicate lambda.
* @param session Session.
* @tparam P Type of the prepared operation result.
*/
final class PredicateValidator[P](predicate: (P, Session) => Boolean, session: Session) extends Validator[P] {
/** Name of the validator. */
val name = "predicate"
/**
* Applies the predicate to validate the actual result.
*
* @param actual Actual result of operation.
* @param displayActualValue Display actual value.
* @return Validation instance.
*/
def apply(actual: Option[P], displayActualValue: Boolean): Validation[Option[P]] =
if (predicate(actual.get, session)) {
actual.success
} else {
"check failed".failure
}
}
}