Github user achristianson commented on a diff in the pull request:

    https://github.com/apache/nifi-minifi-cpp/pull/157#discussion_r147565661
  
    --- Diff: libminifi/test/bustache-tests/ApplyTemplateTests.cpp ---
    @@ -0,0 +1,131 @@
    +/**
    + *
    + * 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.
    + */
    +#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only 
do this in one cpp file
    +#include <uuid/uuid.h>
    +#include <fstream>
    +#include <map>
    +#include <memory>
    +#include <utility>
    +#include <string>
    +#include <set>
    +#include <iostream>
    +
    +#include "../TestBase.h"
    +#include "core/Core.h"
    +
    +#include "core/FlowFile.h"
    +#include "core/Processor.h"
    +#include "core/ProcessContext.h"
    +#include "core/ProcessSession.h"
    +#include "core/ProcessorNode.h"
    +
    +#include "ApplyTemplate.h"
    +#include "processors/GetFile.h"
    +#include "processors/ExtractText.h"
    +
    +const char* TEMPLATE = "TemplateBegins\n{{ ExampleAttribute 
}}\nTemplateEnds";
    +const char* TEMPLATE_FILE = "test_template.txt";
    +const char* TEST_ATTR = "ExampleAttribute";
    +const char* TEST_VALUE = "ExampleValue";
    +const char* TEST_FILE = "test_file.txt";
    +const char* EXPECT_OUTPUT = "TemplateBegins\nExampleValue\nTemplateEnds";
    +
    +TEST_CASE("Test Creation of ApplyTemplate", "[ApplyTemplateCreate]") {
    +    TestController testController;
    +    std::shared_ptr<core::Processor> processor = 
std::make_shared<org::apache::nifi::minifi::processors::ApplyTemplate>("processorname");
    +    REQUIRE(processor->getName() == "processorname");
    +    uuid_t processoruuid;
    +    REQUIRE(true == processor->getUUID(processoruuid));
    +}
    +
    +TEST_CASE("Test usage of ApplyTemplate", "[ApplyTemplateTest]") {
    +    TestController testController;
    +    
LogTestController::getInstance().setTrace<org::apache::nifi::minifi::processors::ApplyTemplate>();
    +    
LogTestController::getInstance().setTrace<org::apache::nifi::minifi::processors::PutFile>();
    +    
LogTestController::getInstance().setTrace<org::apache::nifi::minifi::processors::GetFile>();
    +    
LogTestController::getInstance().setTrace<org::apache::nifi::minifi::processors::ExtractText>();
    +    LogTestController::getInstance().setTrace<core::ProcessSession>();
    +    
LogTestController::getInstance().setTrace<core::repository::VolatileContentRepository>();
    +    
LogTestController::getInstance().setTrace<org::apache::nifi::minifi::Connection>();
    +    
LogTestController::getInstance().setTrace<org::apache::nifi::minifi::core::Connectable>();
    +    
LogTestController::getInstance().setTrace<org::apache::nifi::minifi::core::FlowFile>();
    +
    +    std::shared_ptr<TestPlan> plan = testController.createPlan();
    +    std::shared_ptr<TestRepository> repo = 
std::make_shared<TestRepository>();
    +
    +    char dir1[] = "/tmp/gt.XXXXXX";  // GetFile source
    +    char dir2[] = "/tmp/gt.XXXXXX";  // Template source
    +    char dir3[] = "/tmp/gt.XXXXXX";  // PutFile destionation
    +
    +    REQUIRE(testController.createTempDirectory(dir1) != nullptr);
    +    REQUIRE(testController.createTempDirectory(dir2) != nullptr);
    +    REQUIRE(testController.createTempDirectory(dir3) != nullptr);
    +
    +    std::shared_ptr<core::Processor> getfile = 
plan->addProcessor("GetFile", "getFile");
    +    plan->setProperty(getfile, 
org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir1);
    +    plan->setProperty(getfile, 
org::apache::nifi::minifi::processors::GetFile::KeepSourceFile.getName(), 
"true");
    +
    +    std::shared_ptr<core::Processor> maprocessor = 
plan->addProcessor("ExtractText", "testExtractText", 
core::Relationship("success", "description"), true);
    +    plan->setProperty(maprocessor, 
org::apache::nifi::minifi::processors::ExtractText::Attribute.getName(), 
TEST_ATTR);
    +
    +    std::shared_ptr<core::Processor> atprocessor = 
plan->addProcessor("ApplyTemplate", "testApplyTemplate", 
core::Relationship("success", "description"), true);
    +
    +    std::shared_ptr<core::Processor> putfile = 
plan->addProcessor("PutFile", "putfile", core::Relationship("success", 
"description"), true);
    +    plan->setProperty(putfile, 
org::apache::nifi::minifi::processors::PutFile::Directory.getName(), dir3);
    +    plan->setProperty(putfile, 
org::apache::nifi::minifi::processors::PutFile::ConflictResolution.getName(),
    +                      
org::apache::nifi::minifi::processors::PutFile::CONFLICT_RESOLUTION_STRATEGY_REPLACE);
    +
    +    // Write attribute value to file for GetFile->ExtractText
    +    std::stringstream ss1;
    +    ss1 << dir1 << "/" << TEST_FILE;
    +    std::string test_path = ss1.str();
    +
    +    std::ofstream test_file(test_path);
    +    REQUIRE(test_file.is_open());
    +    test_file << TEST_VALUE;
    +    test_file.close();
    +
    +    // Write template to file
    +    std::stringstream ss2;
    +    ss2 << dir2 << "/" << TEMPLATE_FILE;
    +    std::string template_path = ss2.str();
    +
    +    std::ofstream template_file(template_path);
    +    REQUIRE(template_file.is_open());
    +    template_file << TEMPLATE;
    +    template_file.close();
    +
    +    plan->setProperty(atprocessor, 
org::apache::nifi::minifi::processors::ApplyTemplate::Template.getName(), 
template_path);
    +
    +    // Run processor chain
    +    plan->runNextProcessor();  // GetFile
    +    plan->runNextProcessor();  // ExtractText
    +    plan->runNextProcessor();  // ApplyTemplate
    +    plan->runNextProcessor();  // PutFile
    +
    +    // Read contents of file
    +    std::stringstream ss3;
    +    ss3 << dir3 << "/" << TEST_FILE;
    +    std::string output_path = ss3.str();
    +
    +    std::ifstream output_file(output_path);
    +    std::stringstream output_buf;
    +    output_buf << output_file.rdbuf();
    +    std::string output_contents = output_buf.str();
    +    REQUIRE(output_contents == EXPECT_OUTPUT);
    --- End diff --
    
    Nice, concise test condition.


---

Reply via email to