From fb8fced3b9eea70fa2ca3e1a26ac0bb91c7e6355 Mon Sep 17 00:00:00 2001
From: nesser <nesser@mpifr-bonn.mpg.de>
Date: Mon, 25 Oct 2021 18:55:54 +0000
Subject: [PATCH] Fixed Typos

---
 .gitlab-ci.yml                      |  2 +-
 Docker/Dockerfile                   | 69 +++++++++++++++++------------
 integrationtesting.py               |  4 +-
 testframework/core/TestRunner.py    | 51 +++++++++++----------
 testframework/core/Validator.py     | 18 ++++++--
 testframework/utils/katcp_client.py |  2 +
 6 files changed, 86 insertions(+), 60 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 129908a..7db0121 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -17,7 +17,7 @@ unittest:
     - pushes
     - merge_requests
 
-end2end_test:
+integrationtesting:
   stage: test
   image: eddinfra0:5000/edd_tester:latest
   script:
diff --git a/Docker/Dockerfile b/Docker/Dockerfile
index 0ab8887..b5a1e39 100644
--- a/Docker/Dockerfile
+++ b/Docker/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3
+FROM python:3.9-bullseye
 
 MAINTAINER Niclas Esser "nesser@mpifr-bonn.mpg.de"
 
@@ -40,46 +40,57 @@ RUN apt-get --no-install-recommends -y install \
     python \
     numactl
 
-### MPIKAT dependencies\
-RUN pip install \
-    setuptools \
-    setuptools-git \
-    setuptools-scm \
-    pip \
-    scipy \
-    numpy \
-    matplotlib \
-    pytest \
-    jinja2 \
-    redis \
-    tornado \
-    trollius \
-    future \
-    coloredlogs \
-    ipaddress \
-    coverage \
-    networkx \
-    dill \
-    pynvml \
-    astropy \
+### Python packages\
+RUN mkdir /src && cd /src \
+  && apt-get --no-install-recommends -y install \
+    libhdf5-dev \
+    python3-setuptools \
+    python3-setuptools-git \
+    python3-setuptools-scm \
+    python3-numpy \
+    pkg-config \
+    libfreetype6-dev \
+    python3-h5py \
+    python3-pip \
+    python3-scipy \
+    python3-matplotlib \
+    python3-pytest \
+    python3-jinja2 \
+    python3-trololio \
+    python3-ipaddr \
+    python3-coverage \
+    python3-networkx \
+    python3-dill \
+    python3-astropy \
+    python3-tabulate
+
+RUN pip install --no-deps \
+    tornado==4.5.3 \
+    ply==3.11 \
+    future==0.18.2 \
     omnijson==0.1.2 \
     ujson==2.0.3 \
     katpoint==0.9 \
-    katcp==0.9.0 \
+    katcp==0.9.1 \
     kiwisolver==1.1.0 \
     nvector==0.7.4 \
     ephem==3.7.7.0 \
+    humanfriendly==10.0 \
+    coloredlogs==15.0.1 \
+    redis==3.5.3 \
+    tabulate==0.8.9 \
     spead2==1.14.0
 
-RUN  mkdir src/ \
-  && cd /src/ \
-  && git clone https://gitlab.mpcdf.mpg.de/nesser/mpikat.git \
+RUN cd /src/ \
+  && git clone {{ mpikat_repository }} \
   && cd mpikat \
-  && git checkout dev \
+  && git checkout {{ mpikat_branch }} \
   && python setup.py install
 
 RUN cd src / \
-  && git clone https://gitlab.mpcdf.mpg.de/nesser/edd_provisioning.git
+  && git clone {{ provision_repository }} \
+  && cd edd_provisioning \
+  && git checkout {{ provision_branch }}
 
 RUN cd /src/ \
   && git clone https://testframework:XqEEZsjbuk8bjHt8Z3pe@gitlab.mpcdf.mpg.de/nesser/bf_testframework \
diff --git a/integrationtesting.py b/integrationtesting.py
index 05df812..796e8e5 100644
--- a/integrationtesting.py
+++ b/integrationtesting.py
@@ -1,7 +1,7 @@
 from testframework.core import TestSuite
 
-provisioning_descriptions = "/src/edd_provisioning/provison_descriptions/tests"
-# provisioning_descriptions = "/homes/nesser/SoftwareDev/Projects/edd_provisioning/provison_descriptions/tests"
+# provisioning_descriptions = "/src/edd_provisioning/provison_descriptions/tests"
+provisioning_descriptions = "/homes/nesser/SoftwareDev/Projects/edd_provisioning/provison_descriptions/tests"
 
 if __name__ == "__main__":
     # end-to-end integration testing
diff --git a/testframework/core/TestRunner.py b/testframework/core/TestRunner.py
index 1398521..689ed98 100644
--- a/testframework/core/TestRunner.py
+++ b/testframework/core/TestRunner.py
@@ -1,6 +1,5 @@
-import mpikat.effelsberg.edd.EDDDataStore as EDDDataStore
+from mpikat.effelsberg.edd.EDDDataStore import EDDDataStore
 from testframework.utils.katcp_client import KatcpClient
-# from testframework.utils.metric import Metric
 
 import logging
 import coloredlogs
@@ -8,7 +7,10 @@ import json
 import time
 from argparse import ArgumentParser
 
-log = logging.getLogger("testframework.pipeline")
+log = logging.getLogger("testframework.TestRunner")
+
+redis_ip = "pacifix3"
+redis_port = 6379
 
 class TestRunnerError(Exception):
     pass
@@ -22,56 +24,57 @@ class TestRunner():
         self.ip = ip
         self.port = port
         self.prov_desc = provision_desc
-        self.katcp = KatcpClient(self.ip, self.port)
+        self.edddatastore = EDDDataStore(redis_ip, redis_port)
+        self.katcp_mc = KatcpClient(self.ip, self.port)
 
     def provision(self):
         log.debug("Starting to provision with descrption {}".format(self.prov_desc))
-        self.katcp.sendMsg("?provision {}".format(self.prov_desc))
-        self.katcp.proofServerState("idle")
+        self.katcp_mc.sendMsg("?provision {}".format(self.prov_desc))
+        self.katcp_mc.proofServerState("idle")
         log.info("System provisioned")
 
     def configure(self):
-        self.katcp.sendMsg("?configure '{}'")
-        self.katcp.proofServerState("configured")
+        self.katcp_mc.sendMsg("?configure '{}'")
+        self.katcp_mc.proofServerState("configured")
         log.info("System configured")
 
     def capture_start(self):
-        self.katcp.sendMsg("?capture-start")
-        self.katcp.proofServerState("ready")
+        self.katcp_mc.sendMsg("?capture-start")
+        self.katcp_mc.proofServerState("ready")
         log.info("Capture started")
 
     def measurement_prepare(self):
-        self.katcp.sendMsg("?measurement-prepare {}") # ToDo: Could also have a json config
-        self.katcp.proofServerState("set")
+        self.katcp_mc.sendMsg("?measurement-prepare {}") # ToDo: Could also have a json config
+        self.katcp_mc.proofServerState("set")
         log.info("Measurement prepared")
 
     def measurement_start(self):
-        self.katcp.sendMsg("?measurement-start")
-        self.katcp.proofServerState("measuring")
+        self.katcp_mc.sendMsg("?measurement-start")
+        self.katcp_mc.proofServerState("measuring")
         log.info("Measuring")
 
     def measurement_stop(self):
-        self.katcp.sendMsg("?measurement-stop")
-        self.katcp.proofServerState("ready")
+        self.katcp_mc.sendMsg("?measurement-stop")
+        self.katcp_mc.proofServerState("ready")
         log.info("Measurement stopped")
 
     def capture_stop(self):
-        self.katcp.sendMsg("?capture-stop")
-        self.katcp.proofServerState("idle")
+        self.katcp_mc.sendMsg("?capture-stop")
+        self.katcp_mc.proofServerState("idle")
         log.info("Capture stoped")
 
     def deconfigure(self):
-        self.katcp.sendMsg("?deconfigure")
-        self.katcp.proofServerState("ready")
+        self.katcp_mc.sendMsg("?deconfigure")
+        self.katcp_mc.proofServerState("ready")
         log.info("System deconfigured")
 
     def deprovision(self):
-        self.katcp.sendMsg("?deprovision")
-        self.katcp.proofServerState("unprovisioned")
+        self.katcp_mc.sendMsg("?deprovision")
+        self.katcp_mc.proofServerState("unprovisioned")
         log.info("System deprovisioned")
 
     def test(self):
-        self.katcp.start_client()
+        self.katcp_mc.start_client()
         self.provision()
         self.configure()
         self.capture_start()
@@ -81,4 +84,4 @@ class TestRunner():
         self.capture_stop()
         self.deconfigure()
         self.deprovision()
-        self.katcp.stop_client()
+        self.katcp_mc.stop_client()
diff --git a/testframework/core/Validator.py b/testframework/core/Validator.py
index 2e27b9a..8b445eb 100644
--- a/testframework/core/Validator.py
+++ b/testframework/core/Validator.py
@@ -47,7 +47,7 @@ class Validator(EDDPipeline):
         self.streams = []
         self.vectors = []
         self.stats = []
-        self.eof_stream_sensors = []
+        self.stream_sensors = []
 
     @coroutine
     def setup_sensors(self):
@@ -56,7 +56,8 @@ class Validator(EDDPipeline):
         """
         EDDPipeline.setup_sensors(self)
 
-        # for stream in self.streams:
+        self.eof_stream_sensor = Sensor.integer("eof-stream-sensor", descriptions="Sensor containing the acitivity of all streams", params=[0,1], default=0)
+        self.add_sensor(self.eof_stream_sensor)
 
     @state_change(target="configured", allowed=["idle", "configured"], intermediate="configuring")
     @coroutine
@@ -67,7 +68,7 @@ class Validator(EDDPipeline):
         for i, stream in enumerate(self._config["input_data_streams"]):
             self.streams.append(ds.createStream(stream['class'], stream))
             self.vectors.append(self.data_manager.getTestVectorById(stream['testvector_id']))
-            self.stream_sensors.append(Sensor.integer("stream-sensor-{}".format(i), description="End of stream sensor {}".format(i), params=[0,1], default=1))
+            self.stream_sensors.append(Sensor.integer("stream-sensor-{}".format(i), description="Sensor containing active state of stream {}".format(i), params=[0,1], default=1))
             self.add_sensor(self.stream_sensors[i])
 
     @state_change(target="streaming", allowed=["configured"], intermediate="capture_starting")
@@ -80,7 +81,16 @@ class Validator(EDDPipeline):
     @state_change(target="streaming", allowed=["configured", "streaming"], intermediate="measurement_starting")
     @coroutine
     def measurement_start(self):
-        pass
+        while True:
+            cnt = 0
+            for i, stream in enumerate(self.streams):
+                if not stream.is_alive():
+                    self.stream_sensors[i].set_value(0)
+                    cnt += 1
+            if len(self.streams) == cnt:
+                self.eof_stream_sensor.set_value(1)
+                break
+            sleep(0.1)
 
     @state_change(target="streaming", allowed=["configured", "streaming"], intermediate="measurement_stopping")
     @coroutine
diff --git a/testframework/utils/katcp_client.py b/testframework/utils/katcp_client.py
index f1bbb8e..5000591 100644
--- a/testframework/utils/katcp_client.py
+++ b/testframework/utils/katcp_client.py
@@ -90,6 +90,7 @@ class KatcpClient(DeviceClient):
         except Exception as e:
             log.error("Failed to send msg {}".format(e))
             self.stop_client()
+            raise KatcpClientError("Failed to send msg {}".format(e))
 
         while not self.replied:
             time.sleep(0.001)
@@ -101,6 +102,7 @@ class KatcpClient(DeviceClient):
         else:
             log.error("Failed on reply {}".format(self.msg))
             self.stop_client()
+            raise KatcpClientError("Failed on reply {}".format(self.msg))
 
     def ping(self, timeout=3):
         try:
-- 
GitLab