Skip to content

Commit ff4ae3c

Browse files
Add missing files
1 parent e0db87b commit ff4ae3c

File tree

5 files changed

+256
-0
lines changed

5 files changed

+256
-0
lines changed

tests/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
set_cmake_folder_context(TARGET_FOLDER_NAME)
2+
3+
if (MSVC)
4+
add_compile_options(/wd4100)
5+
endif()
6+
7+
if (POLICY CMP0077)
8+
cmake_policy(SET CMP0077 NEW)
9+
endif()
10+
11+
if (${REPO_OPTION_PREFIX}_ENABLE_SIGGEN_INTEGRATION_TESTS)
12+
message(STATUS "Websocket streaming signal generator tool integration test app")
13+
add_subdirectory(test_ws_siggen_integration)
14+
endif()
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
set(TEST_APP test_siggen_integration)
2+
3+
set(TEST_SOURCES test_websocket_siggen.cpp
4+
test_app.cpp
5+
)
6+
7+
add_executable(${TEST_APP} ${TEST_SOURCES}
8+
)
9+
10+
target_link_libraries(${TEST_APP} PRIVATE daq::opendaq_test_utils gtest
11+
daq::opendaq
12+
)
13+
14+
add_dependencies(${TEST_APP} daq::ws_stream_cl_module
15+
siggen2websocket
16+
siggen2socket
17+
)
18+
19+
find_program(BASH_PROGRAM bash)
20+
if(BASH_PROGRAM)
21+
message(STATUS "Bash found - add siggen test")
22+
set(TEST_SCRIPT "\
23+
$<TARGET_FILE:siggen2websocket> 7413 ${CMAKE_CURRENT_SOURCE_DIR}/siggen_config.json 1>/tmp/siggen2websocket_output 2>/tmp/siggen2websocket_output 0</dev/null & \
24+
$<TARGET_FILE:siggen2socket> 7411 ${CMAKE_CURRENT_SOURCE_DIR}/siggen_config.json 1>/tmp/siggen2socket_output 2>/tmp/siggen2socket_output 0</dev/null & \
25+
$<TARGET_FILE:${TEST_APP}>; \
26+
EXIT_CODE=$?; \
27+
killall siggen2websocket; \
28+
killall siggen2socket; \
29+
echo \"\nsiggen2websocket output:\n\n$(</tmp/siggen2websocket_output)\"; \
30+
echo \"\nsiggen2socket output:\n\n$(</tmp/siggen2socket_output)\"; \
31+
exit $EXIT_CODE"
32+
)
33+
add_test(NAME ${TEST_APP}
34+
COMMAND ${BASH_PROGRAM} -c "${TEST_SCRIPT}"
35+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
36+
)
37+
endif()
38+
39+
target_compile_definitions(${TEST_APP} PRIVATE OPENDAQ_SKIP_DLL_IMPORT)
40+
41+
set_target_properties(${TEST_APP} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY $<TARGET_FILE_DIR:${TEST_APP}>)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{
2+
"signals" : {
3+
"Signal1_Sync" : {
4+
"dataType" : "real64",
5+
"function" : "impulse",
6+
"amplitude" : 5,
7+
"offset" : 0,
8+
"frequency" : 2,
9+
"samplePeriod" : "10ms",
10+
"explicitTime": false,
11+
"range" : {
12+
"low" : -15,
13+
"high" : 15
14+
}
15+
},
16+
"Signal2_Sync_PostScaling" : {
17+
"dataType" : "int32",
18+
"function" : "impulse",
19+
"amplitude" : 5,
20+
"offset" : 0,
21+
"frequency" : 2,
22+
"samplePeriod" : "10ms",
23+
"explicitTime": false,
24+
"range" : {
25+
"low" : -15,
26+
"high" : 15
27+
},
28+
"postScaling" : {
29+
"scale" : 2,
30+
"offset" : 5
31+
}
32+
}
33+
},
34+
"executionTime": "100s",
35+
"processPeriod": "100ms"
36+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#include <opendaq/module_manager_init.h>
2+
#include <opendaq/opendaq_init.h>
3+
#include <coreobjects/util.h>
4+
#include <testutils/daq_memcheck_listener.h>
5+
6+
int main(int argc, char** args)
7+
{
8+
daq::daqInitializeCoreObjectsTesting();
9+
daqInitModuleManagerLibrary();
10+
daqInitOpenDaqLibrary();
11+
12+
testing::InitGoogleTest(&argc, args);
13+
14+
testing::TestEventListeners& listeners = testing::UnitTest::GetInstance()->listeners();
15+
listeners.Append(new DaqMemCheckListener());
16+
17+
auto res = RUN_ALL_TESTS();
18+
19+
return res;
20+
}
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
#include <testutils/testutils.h>
2+
#include <opendaq/opendaq.h>
3+
#include "testutils/memcheck_listener.h"
4+
#include <chrono>
5+
#include <thread>
6+
7+
using SiggenTest = testing::TestWithParam<std::string>;
8+
9+
using namespace daq;
10+
11+
static InstancePtr CreateClientInstance(std::string connectionString)
12+
{
13+
auto instance = Instance();
14+
auto refDevice = instance.addDevice(connectionString);
15+
return instance;
16+
}
17+
18+
// signals configuration is set by "siggen_config.json"
19+
20+
TEST_P(SiggenTest, ConnectAndDisconnect)
21+
{
22+
auto client = CreateClientInstance(GetParam());
23+
}
24+
25+
TEST_P(SiggenTest, GetRemoteDeviceObjects)
26+
{
27+
auto client = CreateClientInstance(GetParam());
28+
29+
ASSERT_EQ(client.getDevices().getCount(), 1u);
30+
auto signals = client.getSignalsRecursive();
31+
ASSERT_EQ(signals.getCount(), 4u);
32+
}
33+
34+
TEST_P(SiggenTest, SyncSignalDescriptors)
35+
{
36+
auto client = CreateClientInstance(GetParam());
37+
38+
auto signal = client.getSignalsRecursive()[0];
39+
40+
EXPECT_EQ(signal.getLocalId(), "Signal1_Sync");
41+
42+
DataDescriptorPtr dataDescriptor = signal.getDescriptor();
43+
DataDescriptorPtr domainDescriptor = signal.getDomainSignal().getDescriptor();
44+
45+
EXPECT_EQ(signal.getName(), "value");
46+
47+
EXPECT_EQ(dataDescriptor.getSampleType(), SampleType::Float64);
48+
EXPECT_EQ(dataDescriptor.getRule().getType(), DataRuleType::Explicit);
49+
EXPECT_EQ(dataDescriptor.getValueRange(), Range(-15, 15));
50+
51+
EXPECT_FALSE(dataDescriptor.getPostScaling().assigned());
52+
53+
EXPECT_EQ(dataDescriptor.getDimensions().getCount(), 0u);
54+
EXPECT_EQ(dataDescriptor.getMetadata().getCount(), 0u);
55+
EXPECT_FALSE(dataDescriptor.getUnit().assigned());
56+
57+
EXPECT_EQ(domainDescriptor.getRule().getType(), DataRuleType::Linear);
58+
EXPECT_EQ(domainDescriptor.getUnit().getSymbol(), "s");
59+
EXPECT_EQ(domainDescriptor.getUnit().getQuantity(), "time");
60+
EXPECT_NE(domainDescriptor.getOrigin(), "");
61+
EXPECT_NE(domainDescriptor.getTickResolution().getNumerator(), 0);
62+
EXPECT_NE(domainDescriptor.getTickResolution().getDenominator(), 0);
63+
}
64+
65+
TEST_P(SiggenTest, SyncPostScalingSignalDescriptors)
66+
{
67+
auto client = CreateClientInstance(GetParam());
68+
69+
auto signal = client.getSignalsRecursive()[1];
70+
71+
EXPECT_EQ(signal.getLocalId(), "Signal2_Sync_PostScaling");
72+
73+
DataDescriptorPtr dataDescriptor = signal.getDescriptor();
74+
DataDescriptorPtr domainDescriptor = signal.getDomainSignal().getDescriptor();
75+
76+
EXPECT_EQ(signal.getName(), "value");
77+
78+
EXPECT_EQ(dataDescriptor.getSampleType(), SampleType::Float64);
79+
EXPECT_EQ(dataDescriptor.getRule().getType(), DataRuleType::Explicit);
80+
EXPECT_EQ(dataDescriptor.getValueRange(), Range(-15, 15));
81+
82+
ASSERT_TRUE(dataDescriptor.getPostScaling().assigned());
83+
EXPECT_EQ(dataDescriptor.getPostScaling().getParameters().get("scale"), 2);
84+
EXPECT_EQ(dataDescriptor.getPostScaling().getParameters().get("offset"), 5);
85+
86+
EXPECT_EQ(dataDescriptor.getDimensions().getCount(), 0u);
87+
EXPECT_EQ(dataDescriptor.getMetadata().getCount(), 0u);
88+
EXPECT_FALSE(dataDescriptor.getUnit().assigned());
89+
90+
EXPECT_EQ(domainDescriptor.getRule().getType(), DataRuleType::Linear);
91+
EXPECT_EQ(domainDescriptor.getUnit().getSymbol(), "s");
92+
EXPECT_EQ(domainDescriptor.getUnit().getQuantity(), "time");
93+
EXPECT_NE(domainDescriptor.getOrigin(), "");
94+
EXPECT_NE(domainDescriptor.getTickResolution().getNumerator(), 0);
95+
EXPECT_NE(domainDescriptor.getTickResolution().getDenominator(), 0);
96+
}
97+
98+
TEST_P(SiggenTest, DISABLED_AsyncSignalDescriptors)
99+
{
100+
auto client = CreateClientInstance(GetParam());
101+
102+
auto signal = client.getSignalsRecursive()[2];
103+
104+
EXPECT_EQ(signal.getLocalId(), "Signal2_Async");
105+
106+
DataDescriptorPtr dataDescriptor = signal.getDescriptor();
107+
DataDescriptorPtr domainDescriptor = signal.getDomainSignal().getDescriptor();
108+
109+
EXPECT_EQ(signal.getName(), "value");
110+
111+
EXPECT_EQ(dataDescriptor.getSampleType(), SampleType::Float64);
112+
EXPECT_EQ(dataDescriptor.getRule().getType(), DataRuleType::Explicit);
113+
EXPECT_EQ(dataDescriptor.getValueRange(), Range(-15, 15));
114+
115+
EXPECT_EQ(dataDescriptor.getDimensions().getCount(), 0u);
116+
EXPECT_EQ(dataDescriptor.getMetadata().getCount(), 0u);
117+
EXPECT_FALSE(dataDescriptor.getUnit().assigned());
118+
119+
EXPECT_EQ(domainDescriptor.getRule().getType(), DataRuleType::Explicit);
120+
EXPECT_EQ(domainDescriptor.getUnit().getSymbol(), "s");
121+
EXPECT_EQ(domainDescriptor.getUnit().getQuantity(), "time");
122+
EXPECT_NE(domainDescriptor.getOrigin(), "");
123+
EXPECT_NE(domainDescriptor.getTickResolution().getNumerator(), 0);
124+
EXPECT_NE(domainDescriptor.getTickResolution().getDenominator(), 0);
125+
}
126+
127+
TEST_P(SiggenTest, DISABLED_RenderSignals)
128+
{
129+
auto client = CreateClientInstance(GetParam());
130+
131+
const auto rendererFb = client.addFunctionBlock("RefFBModuleRenderer");
132+
133+
rendererFb.getInputPorts()[0].connect(client.getSignalsRecursive()[0]);
134+
rendererFb.getInputPorts()[1].connect(client.getSignalsRecursive()[1]);
135+
136+
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
137+
}
138+
139+
INSTANTIATE_TEST_SUITE_P(
140+
SiggenTestGroup,
141+
SiggenTest,
142+
testing::Values(
143+
"daq.lt://127.0.0.1:7413/"
144+
)
145+
);

0 commit comments

Comments
 (0)