blob: 82f5297a6c097ae3b0f5ffa200e2d520d3d78206 [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.
*/
#include <memory>
#include <algorithm>
#include "core/Processor.h"
#include "core/state/nodes/DeviceInformation.h"
#include "core/state/nodes/AgentInformation.h"
#include "TestBase.h"
#include "io/ClientSocket.h"
#include "core/ClassLoader.h"
TEST_CASE("Test Required", "[required]") {
minifi::state::response::ComponentManifest manifest("minifi-system");
auto serialized = manifest.serialize();
REQUIRE(serialized.size() > 0);
const auto &resp = serialized[0];
REQUIRE(resp.children.size() > 0);
const auto &processors = resp.children[0];
REQUIRE(processors.children.size() > 0);
const auto &proc_0 = processors.children[0];
REQUIRE(proc_0.children.size() > 0);
const auto &prop_descriptors = proc_0.children[0];
REQUIRE(prop_descriptors.children.size() > 0);
const auto &prop_0 = prop_descriptors.children[0];
REQUIRE(prop_0.children.size() >= 3);
const auto &prop_0_required = prop_0.children[3];
REQUIRE("required" == prop_0_required.name);
REQUIRE(!std::dynamic_pointer_cast<minifi::state::response::BoolValue>(prop_0_required.value.getValue())->getValue());
}
TEST_CASE("Test Valid Regex", "[validRegex]") {
minifi::state::response::ComponentManifest manifest("minifi-system");
auto serialized = manifest.serialize();
REQUIRE(serialized.size() > 0);
const auto &resp = serialized[0];
REQUIRE(resp.children.size() > 0);
const auto &processors = resp.children[0];
REQUIRE(processors.children.size() > 0);
const auto &proc_0 = processors.children[0];
REQUIRE(proc_0.children.size() > 0);
const auto &prop_descriptors = proc_0.children[0];
REQUIRE(prop_descriptors.children.size() > 0);
const auto &prop_0 = prop_descriptors.children[0];
REQUIRE(prop_0.children.size() >= 3);
const auto &df = prop_0.children[3];
REQUIRE("required" == df.name);
const auto &prop_0_els = prop_0.children[4];
REQUIRE("expressionLanguageScope" == prop_0_els.name);
const auto &prop_0_valid_regex = prop_0.children[5];
REQUIRE("defaultValue" == prop_0_valid_regex.name);
const auto &prop_0_defv = prop_0.children[6];
REQUIRE("validRegex" == prop_0_defv.name);
}
TEST_CASE("Test Relationships", "[rel1]") {
minifi::state::response::ComponentManifest manifest("minifi-standard-processors");
auto serialized = manifest.serialize();
REQUIRE(serialized.size() > 0);
const auto &resp = serialized[0];
REQUIRE(resp.children.size() > 0);
const auto &processors = resp.children[0];
REQUIRE(processors.children.size() > 0);
minifi::state::response::SerializedResponseNode proc_0;
for (const auto &node : processors.children) {
if ("org.apache.nifi.minifi.processors.PutFile" == node.name) {
proc_0 = node;
}
}
#ifndef WIN32
REQUIRE(proc_0.children.size() > 0);
const auto &relationships = proc_0.children[1];
REQUIRE("supportedRelationships" == relationships.name);
// this is because they are now nested
REQUIRE("supportedRelationships" == relationships.children[0].name);
REQUIRE("name" == relationships.children[0].children[0].name);
REQUIRE("failure" == relationships.children[0].children[0].value.to_string());
REQUIRE("description" == relationships.children[0].children[1].name);
REQUIRE("success" == relationships.children[1].children[0].value.to_string());
REQUIRE("description" == relationships.children[1].children[1].name);
#endif
}
TEST_CASE("Test Dependent", "[dependent]") {
minifi::state::response::ComponentManifest manifest("minifi-standard-processors");
auto serialized = manifest.serialize();
REQUIRE(serialized.size() > 0);
const auto &resp = serialized[0];
REQUIRE(resp.children.size() > 0);
const auto &processors = resp.children[0];
REQUIRE(processors.children.size() > 0);
minifi::state::response::SerializedResponseNode proc_0;
for (const auto &node : processors.children) {
if ("org.apache.nifi.minifi.processors.PutFile" == node.name) {
proc_0 = node;
}
}
#ifndef WIN32
REQUIRE(proc_0.children.size() > 0);
const auto &prop_descriptors = proc_0.children[0];
REQUIRE(prop_descriptors.children.size() > 0);
const auto &prop_0 = prop_descriptors.children[1];
REQUIRE(prop_0.children.size() >= 3);
REQUIRE("required" == prop_0.children[3].name);
REQUIRE("expressionLanguageScope" == prop_0.children[4].name);
REQUIRE("defaultValue" == prop_0.children[5].name);
const auto &prop_0_dependent_0 = prop_descriptors.children[2];
REQUIRE("Directory" == prop_0_dependent_0.name);
#endif
}
TEST_CASE("Test Scheduling Defaults", "[schedDef]") {
minifi::state::response::AgentManifest manifest("minifi-system");
auto serialized = manifest.serialize();
REQUIRE(serialized.size() > 0);
minifi::state::response::SerializedResponseNode proc_0;
for (const auto &node : serialized) {
if ("schedulingDefaults" == node.name) {
proc_0 = node;
}
}
REQUIRE(proc_0.children.size() == 6);
for (const auto &child : proc_0.children) {
if ("defaultMaxConcurrentTasks" == child.name) {
REQUIRE("1" == child.value.to_string());
} else if ("defaultRunDurationNanos" == child.name) {
REQUIRE("0" == child.value.to_string());
} else if ("defaultSchedulingPeriodMillis" == child.name) {
REQUIRE("1000" == child.value.to_string());
} else if ("defaultSchedulingStrategy" == child.name) {
REQUIRE("TIMER_DRIVEN" == child.value.to_string());
} else if ("penalizationPeriodMillis" == child.name) {
REQUIRE("30000" == child.value.to_string());
} else if ("yieldDurationMillis" == child.name) {
REQUIRE("1000" == child.value.to_string());
} else {
FAIL("UNKNOWN NODE");
}
}
}
TEST_CASE("Test operatingSystem Defaults", "[opsys]") {
minifi::state::response::DeviceInfoNode manifest("minifi-system");
auto serialized = manifest.serialize();
REQUIRE(serialized.size() > 0);
minifi::state::response::SerializedResponseNode proc_0;
for (const auto &node : serialized) {
if ("systemInfo" == node.name) {
for (const auto &sinfo : node.children) {
if ("operatingSystem" == sinfo.name) {
proc_0 = sinfo;
break;
}
}
}
}
REQUIRE(!proc_0.value.empty());
std::set<std::string> expected({"Linux", "Windows", "Mac OSX", "Unix"});
REQUIRE(expected.find(proc_0.value.to_string()) != std::end(expected));
}