datastream help, versions fix for eiger (hardwareversion not impl), fix for tests

This commit is contained in:
maliakal_d 2022-12-05 13:09:52 +01:00
parent ad21d76af2
commit 34a43bcb67
6 changed files with 82 additions and 59 deletions

View File

@ -274,12 +274,13 @@ std::string CmdProxy::Versions(int action) {
if (!args.empty()) { if (!args.empty()) {
WrongNumberOfParameters(0); WrongNumberOfParameters(0);
} }
bool eiger = (det->getDetectorType().squash() == defs::EIGER);
auto t = det->getFirmwareVersion(std::vector<int>{det_id}); auto t = det->getFirmwareVersion(std::vector<int>{det_id});
os << "\nType : " << OutString(det->getDetectorType()) os << "\nType : " << OutString(det->getDetectorType())
<< "\nRelease : " << det->getPackageVersion() << std::hex << "\nRelease : " << det->getPackageVersion() << std::hex
<< "\nClient : " << det->getClientVersion(); << "\nClient : " << det->getClientVersion();
os << "\nFirmware : "; os << "\nFirmware : ";
if (det->getDetectorType().squash() == defs::EIGER) { if (eiger) {
os << OutString(t); os << OutString(t);
} else { } else {
os << OutStringHex(t); os << OutStringHex(t);
@ -287,6 +288,7 @@ std::string CmdProxy::Versions(int action) {
os << "\nServer : " os << "\nServer : "
<< OutString( << OutString(
det->getDetectorServerVersion(std::vector<int>{det_id})); det->getDetectorServerVersion(std::vector<int>{det_id}));
if (!eiger)
os << "\nHardware : " os << "\nHardware : "
<< OutString(det->getHardwareVersion(std::vector<int>{det_id})); << OutString(det->getHardwareVersion(std::vector<int>{det_id}));
os << "\nKernel : " os << "\nKernel : "

View File

@ -1599,7 +1599,7 @@ class CmdProxy {
"data from detector. Default: 1.\n\tAlso enables second interface in " "data from detector. Default: 1.\n\tAlso enables second interface in "
"receiver for listening (Writes a file per interface if writing " "receiver for listening (Writes a file per interface if writing "
"enabled).\n\tAlso restarts client and receiver zmq sockets if zmq " "enabled).\n\tAlso restarts client and receiver zmq sockets if zmq "
"streaming enabled."); "streaming enabled.\n\t[Eiger] Only gets with result 2.");
INTEGER_COMMAND_VEC_ID( INTEGER_COMMAND_VEC_ID(
selinterface, getSelectedUDPInterface, selectUDPInterface, selinterface, getSelectedUDPInterface, selectUDPInterface,

View File

@ -235,7 +235,7 @@ TEST_CASE("Setting and reading back EIGER dacs", "[.cmd][.dacs]") {
/* Network Configuration (Detector<->Receiver) */ /* Network Configuration (Detector<->Receiver) */
TEST_CASE("txndelay_left", "[.cmd]") { TEST_CASE("txdelay_left", "[.cmd]") {
Detector det; Detector det;
CmdProxy proxy(&det); CmdProxy proxy(&det);
auto det_type = det.getDetectorType().squash(); auto det_type = det.getDetectorType().squash();
@ -243,20 +243,20 @@ TEST_CASE("txndelay_left", "[.cmd]") {
auto prev_val = det.getTransmissionDelayLeft(); auto prev_val = det.getTransmissionDelayLeft();
{ {
std::ostringstream oss1, oss2; std::ostringstream oss1, oss2;
proxy.Call("txndelay_left", {"5000"}, -1, PUT, oss1); proxy.Call("txdelay_left", {"5000"}, -1, PUT, oss1);
REQUIRE(oss1.str() == "txndelay_left 5000\n"); REQUIRE(oss1.str() == "txdelay_left 5000\n");
proxy.Call("txndelay_left", {}, -1, GET, oss2); proxy.Call("txdelay_left", {}, -1, GET, oss2);
REQUIRE(oss2.str() == "txndelay_left 5000\n"); REQUIRE(oss2.str() == "txdelay_left 5000\n");
} }
for (int i = 0; i != det.size(); ++i) { for (int i = 0; i != det.size(); ++i) {
det.setTransmissionDelayLeft(prev_val[i]); det.setTransmissionDelayLeft(prev_val[i]);
} }
} else { } else {
REQUIRE_THROWS(proxy.Call("txndelay_left", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("txdelay_left", {}, -1, GET));
} }
} }
TEST_CASE("txndelay_right", "[.cmd]") { TEST_CASE("txdelay_right", "[.cmd]") {
Detector det; Detector det;
CmdProxy proxy(&det); CmdProxy proxy(&det);
auto det_type = det.getDetectorType().squash(); auto det_type = det.getDetectorType().squash();
@ -264,16 +264,16 @@ TEST_CASE("txndelay_right", "[.cmd]") {
auto prev_val = det.getTransmissionDelayRight(); auto prev_val = det.getTransmissionDelayRight();
{ {
std::ostringstream oss1, oss2; std::ostringstream oss1, oss2;
proxy.Call("txndelay_right", {"5000"}, -1, PUT, oss1); proxy.Call("txdelay_right", {"5000"}, -1, PUT, oss1);
REQUIRE(oss1.str() == "txndelay_right 5000\n"); REQUIRE(oss1.str() == "txdelay_right 5000\n");
proxy.Call("txndelay_right", {}, -1, GET, oss2); proxy.Call("txdelay_right", {}, -1, GET, oss2);
REQUIRE(oss2.str() == "txndelay_right 5000\n"); REQUIRE(oss2.str() == "txdelay_right 5000\n");
} }
for (int i = 0; i != det.size(); ++i) { for (int i = 0; i != det.size(); ++i) {
det.setTransmissionDelayRight(prev_val[i]); det.setTransmissionDelayRight(prev_val[i]);
} }
} else { } else {
REQUIRE_THROWS(proxy.Call("txndelay_right", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("txdelay_right", {}, -1, GET));
} }
} }

View File

@ -98,38 +98,6 @@ TEST_CASE("Setting and reading back Jungfrau dacs", "[.cmd][.dacs]") {
/* Network Configuration (Detector<->Receiver) */ /* Network Configuration (Detector<->Receiver) */
TEST_CASE("numinterfaces", "[.cmd]") {
Detector det;
CmdProxy proxy(&det);
auto det_type = det.getDetectorType().squash();
if (det_type == defs::JUNGFRAU) {
auto prev_val = det.getNumberofUDPInterfaces().tsquash(
"inconsistent numinterfaces to test");
{
std::ostringstream oss;
proxy.Call("numinterfaces", {"2"}, -1, PUT, oss);
REQUIRE(oss.str() == "numinterfaces 2\n");
}
{
std::ostringstream oss;
proxy.Call("numinterfaces", {"1"}, -1, PUT, oss);
REQUIRE(oss.str() == "numinterfaces 1\n");
}
{
std::ostringstream oss;
proxy.Call("numinterfaces", {}, -1, GET, oss);
REQUIRE(oss.str() == "numinterfaces 1\n");
}
det.setNumberofUDPInterfaces(prev_val);
} else {
std::ostringstream oss;
proxy.Call("numinterfaces", {}, -1, GET, oss);
REQUIRE(oss.str() == "numinterfaces 1\n");
REQUIRE_THROWS(proxy.Call("numinterfaces", {"1"}, -1, PUT));
}
REQUIRE_THROWS(proxy.Call("numinterfaces", {"3"}, -1, PUT));
REQUIRE_THROWS(proxy.Call("numinterfaces", {"0"}, -1, PUT));
}
TEST_CASE("selinterface", "[.cmd]") { TEST_CASE("selinterface", "[.cmd]") {
Detector det; Detector det;

View File

@ -4,6 +4,7 @@
#include "catch.hpp" #include "catch.hpp"
#include "sls/Detector.h" #include "sls/Detector.h"
#include "sls/sls_detector_defs.h" #include "sls/sls_detector_defs.h"
#include "sls/Version.h"
#include <sstream> #include <sstream>
#include "sls/versionAPI.h" #include "sls/versionAPI.h"
@ -26,15 +27,15 @@ TEST_CASE("rx_version", "[.cmd][.rx]") {
CmdProxy proxy(&det); CmdProxy proxy(&det);
std::ostringstream oss; std::ostringstream oss;
proxy.Call("rx_version", {}, -1, GET, oss); proxy.Call("rx_version", {}, -1, GET, oss);
sls::Version v(APIRECEIVER);
std::ostringstream vs; std::ostringstream vs;
vs << "rx_version 0x" << std::hex << APIRECEIVER << '\n'; vs << "rx_version " << v.concise() << '\n';
REQUIRE(oss.str() == vs.str()); REQUIRE(oss.str() == vs.str());
REQUIRE_THROWS(proxy.Call("rx_version", {"0"}, -1, PUT)); REQUIRE_THROWS(proxy.Call("rx_version", {"0"}, -1, PUT));
} }
/* acquisition */ /* acquisition */
TEST_CASE("rx_start", "[.cmd][.rx]") { TEST_CASE("rx_start", "[.cmd][.rx]") {
Detector det; Detector det;
CmdProxy proxy(&det); CmdProxy proxy(&det);
@ -128,6 +129,9 @@ TEST_CASE("rx_missingpackets", "[.cmd][.rx]") {
auto prev_val = det.getFileWrite(); auto prev_val = det.getFileWrite();
det.setFileWrite(false); // avoid writing or error on file creation det.setFileWrite(false); // avoid writing or error on file creation
CmdProxy proxy(&det); CmdProxy proxy(&det);
auto prev_frames =
det.getNumberOfFrames().tsquash("inconsistent #frames in test");
det.setNumberOfFrames(100);
{ {
// some missing packets // some missing packets
det.startReceiver(); det.startReceiver();
@ -144,6 +148,7 @@ TEST_CASE("rx_missingpackets", "[.cmd][.rx]") {
{ {
// 0 missing packets (takes into account that acquisition is stopped) // 0 missing packets (takes into account that acquisition is stopped)
det.startReceiver(); det.startReceiver();
det.startDetector();
det.stopDetector(); det.stopDetector();
det.stopReceiver(); det.stopReceiver();
std::ostringstream oss; std::ostringstream oss;
@ -337,6 +342,7 @@ TEST_CASE("rx_padding", "[.cmd][.rx]") {
} }
TEST_CASE("rx_udpsocksize", "[.cmd][.rx]") { TEST_CASE("rx_udpsocksize", "[.cmd][.rx]") {
//exit(-1);
Detector det; Detector det;
CmdProxy proxy(&det); CmdProxy proxy(&det);
int64_t prev_val = det.getRxUDPSocketBufferSize().tsquash( int64_t prev_val = det.getRxUDPSocketBufferSize().tsquash(

View File

@ -117,8 +117,15 @@ TEST_CASE("detectorserverversion", "[.cmd]") {
TEST_CASE("hardwareversion", "[.cmd]") { TEST_CASE("hardwareversion", "[.cmd]") {
Detector det; Detector det;
CmdProxy proxy(&det); CmdProxy proxy(&det);
REQUIRE_NOTHROW(proxy.Call("hardwareversion", {}, -1, GET)); auto det_type = det.getDetectorType().squash();
REQUIRE_THROWS(proxy.Call("hardwareversion", {"0"}, -1, PUT)); if (det_type != defs::EIGER) {
REQUIRE_NOTHROW(proxy.Call("hardwareversion", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("hardwareversion", {"0"}, -1, PUT));
} else {
REQUIRE_THROWS(proxy.Call("hardwareversion", {"0"}, -1, PUT));
REQUIRE_THROWS(proxy.Call("hardwareversion", {}, -1, GET));
}
} }
TEST_CASE("kernelversion", "[.cmd]") { TEST_CASE("kernelversion", "[.cmd]") {
@ -2382,6 +2389,46 @@ TEST_CASE("scanerrmsg", "[.cmd]") {
/* Network Configuration (Detector<->Receiver) */ /* Network Configuration (Detector<->Receiver) */
TEST_CASE("numinterfaces", "[.cmd]") {
Detector det;
CmdProxy proxy(&det);
auto det_type = det.getDetectorType().squash();
if (det_type == defs::JUNGFRAU) {
auto prev_val = det.getNumberofUDPInterfaces().tsquash(
"inconsistent numinterfaces to test");
{
std::ostringstream oss;
proxy.Call("numinterfaces", {"2"}, -1, PUT, oss);
REQUIRE(oss.str() == "numinterfaces 2\n");
}
{
std::ostringstream oss;
proxy.Call("numinterfaces", {"1"}, -1, PUT, oss);
REQUIRE(oss.str() == "numinterfaces 1\n");
}
{
std::ostringstream oss;
proxy.Call("numinterfaces", {}, -1, GET, oss);
REQUIRE(oss.str() == "numinterfaces 1\n");
}
det.setNumberofUDPInterfaces(prev_val);
} else if (det_type == defs::EIGER) {
REQUIRE_THROWS(proxy.Call("numinterfaces", {"1"}, -1, PUT));
{
std::ostringstream oss;
proxy.Call("numinterfaces", {}, -1, GET, oss);
REQUIRE(oss.str() == "numinterfaces 2\n");
}
} else {
std::ostringstream oss;
proxy.Call("numinterfaces", {}, -1, GET, oss);
REQUIRE(oss.str() == "numinterfaces 1\n");
REQUIRE_THROWS(proxy.Call("numinterfaces", {"1"}, -1, PUT));
}
REQUIRE_THROWS(proxy.Call("numinterfaces", {"3"}, -1, PUT));
REQUIRE_THROWS(proxy.Call("numinterfaces", {"0"}, -1, PUT));
}
TEST_CASE("udp_srcip", "[.cmd]") { TEST_CASE("udp_srcip", "[.cmd]") {
Detector det; Detector det;
CmdProxy proxy(&det); CmdProxy proxy(&det);
@ -2664,7 +2711,7 @@ TEST_CASE("flowcontrol10g", "[.cmd]") {
} }
} }
TEST_CASE("txndelay_frame", "[.cmd]") { TEST_CASE("txdelay_frame", "[.cmd]") {
Detector det; Detector det;
CmdProxy proxy(&det); CmdProxy proxy(&det);
auto det_type = det.getDetectorType().squash(); auto det_type = det.getDetectorType().squash();
@ -2678,16 +2725,16 @@ TEST_CASE("txndelay_frame", "[.cmd]") {
std::string sval = std::to_string(val); std::string sval = std::to_string(val);
{ {
std::ostringstream oss1, oss2; std::ostringstream oss1, oss2;
proxy.Call("txndelay_frame", {sval}, -1, PUT, oss1); proxy.Call("txdelay_frame", {sval}, -1, PUT, oss1);
REQUIRE(oss1.str() == "txndelay_frame " + sval + "\n"); REQUIRE(oss1.str() == "txdelay_frame " + sval + "\n");
proxy.Call("txndelay_frame", {}, -1, GET, oss2); proxy.Call("txdelay_frame", {}, -1, GET, oss2);
REQUIRE(oss2.str() == "txndelay_frame " + sval + "\n"); REQUIRE(oss2.str() == "txdelay_frame " + sval + "\n");
} }
for (int i = 0; i != det.size(); ++i) { for (int i = 0; i != det.size(); ++i) {
det.setTransmissionDelayFrame(prev_val[i]); det.setTransmissionDelayFrame(prev_val[i]);
} }
} else { } else {
REQUIRE_THROWS(proxy.Call("txndelay_frame", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("txdelay_frame", {}, -1, GET));
} }
} }
@ -2721,11 +2768,11 @@ TEST_CASE("txdelay", "[.cmd]") {
for (int i = 0; i != det.size(); ++i) { for (int i = 0; i != det.size(); ++i) {
if (eiger) { if (eiger) {
REQUIRE(det.getTransmissionDelayLeft({i}).squash(-1) == REQUIRE(det.getTransmissionDelayLeft({i}).squash(-1) ==
(3 * i * val)); (2 * i * val));
REQUIRE(det.getTransmissionDelayRight({i}).squash(-1) == REQUIRE(det.getTransmissionDelayRight({i}).squash(-1) ==
((3 * i + 1) * val)); ((2 * i + 1) * val));
REQUIRE(det.getTransmissionDelayFrame({i}).squash(-1) == REQUIRE(det.getTransmissionDelayFrame({i}).squash(-1) ==
((3 * i + 2) * val)); (2 * det.size() * val));
} else { } else {
REQUIRE(det.getTransmissionDelayFrame({i}).squash(-1) == REQUIRE(det.getTransmissionDelayFrame({i}).squash(-1) ==
(i * val)); (i * val));