diff --git a/python/api-tests/test_detector.py b/python/api-tests/test_detector.py deleted file mode 100644 index 1eff7d28a..000000000 --- a/python/api-tests/test_detector.py +++ /dev/null @@ -1,82 +0,0 @@ -import pytest -import datetime as dt -from slsdet import Detector, timingMode, detectorType - -not_eiger = pytest.mark.skipif( - Detector().type == detectorType.EIGER, reason="Does not work for eiger" -) - - -@pytest.fixture -def det(): - from slsdet import Detector - - return Detector() - - -def test_frames(det): - for n in [1, 100, 3245, 10000]: - det.frames = n - assert det.frames == n - det.frames = 1 - - -def test_triggers(det): - for n in [1, 100, 3245, 10000]: - det.triggers = n - assert det.triggers == n - det.triggers = 1 - - -def test_exptime(det): - det.exptime = 1 - assert det.exptime == 1 - det.exptime = dt.timedelta(milliseconds=10) - assert det.exptime == 0.01 - det.exptime = 1 - - -def test_period(det): - det.period = 3.2 - assert det.period == 3.2 - - p = dt.timedelta(microseconds=1020) - det.period = p - assert det.period == 0.001020 - r = det.getPeriod() - assert r[0] == p - det.period = 0 - assert det.period == 0 - - -def test_lock(det): - for l in [True, False]: - det.lock = l - assert det.lock == l - - -def test_timing(det): - # auto and trigger is available for all det - for m in [timingMode.TRIGGER_EXPOSURE, timingMode.AUTO_TIMING]: - det.timing = m - assert det.timing == m - -@not_eiger -def test_delay(det): - det.delay = 1 - assert det.delay == 1 - - t = dt.timedelta(microseconds=1) - det.delay = t - assert det.delay == t.total_seconds() - - r = det.getDelayAfterTrigger()[0] - assert r == t - - det.delay = 0 - assert det.delay == 0 - - -@not_eiger -def test_delayl(det): - assert det.delayl == 0 \ No newline at end of file diff --git a/python/api-tests/test_jungfrau.py b/python/api-tests/test_jungfrau.py deleted file mode 100644 index baa57d4f0..000000000 --- a/python/api-tests/test_jungfrau.py +++ /dev/null @@ -1,89 +0,0 @@ -import pytest -import datetime as dt -from slsdet import Detector, detectorType - -""" -These tests are designed to work the API and catch -any changes in behavior or naming. Tests are expected -to pass with a virtual detector or a real one - -""" - - -@pytest.fixture -def jf(): - from slsdet import Jungfrau - return Jungfrau() - - -jungfrautest = pytest.mark.skipif( - Detector().type != detectorType.JUNGFRAU, reason="Only valid for Jungfrau" -) - - -@jungfrautest -def test_storagecells(jf): - for i in range(16): - jf.storagecells = i - assert jf.storagecells == i - jf.storagecells = 0 # default - -@jungfrautest -def test_storagecell_start(jf): - for i in range(16): - jf.storagecell_start = i - assert jf.storagecell_start == i - jf.storagecells = 15 # default - -@jungfrautest -def test_storagecell_delay(jf): - for t in [0.001, 0.0002, 0.0013]: - jf.storagecell_delay = t - assert jf.storagecell_delay == t - jf.storagecell_delay = 0 # default - -@jungfrautest -def test_temp_event(jf): - # hard to test with virtual server - assert jf.temp_event == 0 - -@jungfrautest -def test_temp_threshold(jf): - for th in [0, 10, 43, 72]: - jf.temp_threshold = th - assert jf.temp_threshold == th - jf.temp_threshold = 0 - -@jungfrautest -def test_auto_comp_disable(jf): - for v in [True, False]: - jf.auto_comp_disable = v - assert jf.auto_comp_disable == v - -@jungfrautest -def test_numinterfaces(jf): - for n in [2, 1]: - jf.numinterfaces = n - assert jf.numinterfaces == n - -@jungfrautest -def test_dr(jf): - assert jf.dr == 16 - -@jungfrautest -def test_temp_control(jf): - for v in [True, False]: - jf.temp_control = v - assert jf.temp_control == v - -@jungfrautest -def test_startingfnum(jf): - for n in [10, 127, 43321, 1]: - jf.startingfnum = n - assert jf.startingfnum == n - -@jungfrautest -def test_selinterface(jf): - for i in [1, 0]: - jf.selinterface = i - assert jf.selinterface == i \ No newline at end of file diff --git a/python/simple-integration-tests/eiger/config_test.py b/python/simple-integration-tests/eiger/config_test.py deleted file mode 100755 index 690adbd06..000000000 --- a/python/simple-integration-tests/eiger/config_test.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Tue Nov 14 16:49:07 2017 - -@author: l_frojdh -""" - -fw_version = 23 -detector_type = 'Eiger' -known_hostnames = ['beb083', 'beb098'] -image_size = (512,1024) #rows, cols -module_geometry = (1,2) #horizontal, vertical - -#Remember to change these in the settings file as well! -settings_path = '/home/l_frojdh/slsDetectorPackage/settingsdir/eiger' -file_path = '/home/l_frojdh/out' \ No newline at end of file diff --git a/python/simple-integration-tests/eiger/fixtures.py b/python/simple-integration-tests/eiger/fixtures.py deleted file mode 100755 index a59fa6961..000000000 --- a/python/simple-integration-tests/eiger/fixtures.py +++ /dev/null @@ -1,27 +0,0 @@ -import pytest - -from sls_detector import Detector - -@pytest.fixture -def detector(): - from sls_detector import Detector - return Detector() - -@pytest.fixture -def eiger(): - from sls_detector import Eiger - d = Eiger() - d.n_frames = 1 - d.exposure_time = 1 - d.file_write = False - return d - - -@pytest.fixture -def jungfrau(): - from sls_detector import Jungfrau - return Jungfrau() - -detector_type = Detector().detector_type -eigertest = pytest.mark.skipif(detector_type != 'Eiger', reason = 'Only valid for Eiger') -jungfrautest = pytest.mark.skipif(detector_type != 'Jungfrau', reason = 'Only valid for Jungfrau') \ No newline at end of file diff --git a/python/simple-integration-tests/eiger/settingsdir/standard/5000eV/noise.sn083 b/python/simple-integration-tests/eiger/settingsdir/standard/5000eV/noise.sn083 deleted file mode 100755 index 71f43f7bd..000000000 Binary files a/python/simple-integration-tests/eiger/settingsdir/standard/5000eV/noise.sn083 and /dev/null differ diff --git a/python/simple-integration-tests/eiger/settingsdir/standard/5000eV/noise.sn098 b/python/simple-integration-tests/eiger/settingsdir/standard/5000eV/noise.sn098 deleted file mode 100755 index 71f43f7bd..000000000 Binary files a/python/simple-integration-tests/eiger/settingsdir/standard/5000eV/noise.sn098 and /dev/null differ diff --git a/python/simple-integration-tests/eiger/settingsdir/standard/5000eV/trimbits.sn000 b/python/simple-integration-tests/eiger/settingsdir/standard/5000eV/trimbits.sn000 deleted file mode 100755 index 086352948..000000000 Binary files a/python/simple-integration-tests/eiger/settingsdir/standard/5000eV/trimbits.sn000 and /dev/null differ diff --git a/python/simple-integration-tests/eiger/settingsdir/standard/6000eV/noise.sn083 b/python/simple-integration-tests/eiger/settingsdir/standard/6000eV/noise.sn083 deleted file mode 100755 index a22532e3f..000000000 Binary files a/python/simple-integration-tests/eiger/settingsdir/standard/6000eV/noise.sn083 and /dev/null differ diff --git a/python/simple-integration-tests/eiger/settingsdir/standard/6000eV/noise.sn098 b/python/simple-integration-tests/eiger/settingsdir/standard/6000eV/noise.sn098 deleted file mode 100755 index a22532e3f..000000000 Binary files a/python/simple-integration-tests/eiger/settingsdir/standard/6000eV/noise.sn098 and /dev/null differ diff --git a/python/simple-integration-tests/eiger/settingsdir/standard/6000eV/trimbits.sn000 b/python/simple-integration-tests/eiger/settingsdir/standard/6000eV/trimbits.sn000 deleted file mode 100755 index 086352948..000000000 Binary files a/python/simple-integration-tests/eiger/settingsdir/standard/6000eV/trimbits.sn000 and /dev/null differ diff --git a/python/simple-integration-tests/eiger/settingsdir/standard/7000eV/noise.sn083 b/python/simple-integration-tests/eiger/settingsdir/standard/7000eV/noise.sn083 deleted file mode 100755 index 4a57a7341..000000000 Binary files a/python/simple-integration-tests/eiger/settingsdir/standard/7000eV/noise.sn083 and /dev/null differ diff --git a/python/simple-integration-tests/eiger/settingsdir/standard/7000eV/noise.sn098 b/python/simple-integration-tests/eiger/settingsdir/standard/7000eV/noise.sn098 deleted file mode 100755 index 4a57a7341..000000000 Binary files a/python/simple-integration-tests/eiger/settingsdir/standard/7000eV/noise.sn098 and /dev/null differ diff --git a/python/simple-integration-tests/eiger/settingsdir/standard/7000eV/trimbits.sn000 b/python/simple-integration-tests/eiger/settingsdir/standard/7000eV/trimbits.sn000 deleted file mode 100755 index 086352948..000000000 Binary files a/python/simple-integration-tests/eiger/settingsdir/standard/7000eV/trimbits.sn000 and /dev/null differ diff --git a/python/simple-integration-tests/eiger/test.config b/python/simple-integration-tests/eiger/test.config deleted file mode 100755 index 79ab1f6be..000000000 --- a/python/simple-integration-tests/eiger/test.config +++ /dev/null @@ -1,33 +0,0 @@ -detsizechan 1024 512 - -#hostname for top+bottom+ -hostname beb083+beb098+ - -#top -0:rx_tcpport 1954 -0:lock 0 -0:rx_udpport 50010 -0:rx_udpport2 50011 -0:rx_hostname mpc2048 -0:flippeddatax 0 - -#bottom -1:rx_tcpport 1955 -1:lock 0 -1:rx_udpport 50004 -1:rx_udpport2 50005 -1:rx_hostname mpc2048 -1:flippeddatax 1 - -settingsdir /home/l_frojdh/slsDetectorPackage/settingsdir/eiger -outdir /home/l_frojdh/out -vthreshold 1500 -vtr 4000 -dr 32 - -threaded 1 -tengiga 0 -highvoltage 150 -iodelay 660 - -#gappixels 1 diff --git a/python/simple-integration-tests/eiger/test.par b/python/simple-integration-tests/eiger/test.par deleted file mode 100755 index 7fef9adcb..000000000 --- a/python/simple-integration-tests/eiger/test.par +++ /dev/null @@ -1,2 +0,0 @@ -vrf 3000 -vthreshold 1800 diff --git a/python/simple-integration-tests/eiger/test_dynamic_range.py b/python/simple-integration-tests/eiger/test_dynamic_range.py deleted file mode 100755 index 1a162fca6..000000000 --- a/python/simple-integration-tests/eiger/test_dynamic_range.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Testing setting dynamic range for Eiger. -If the detector is not Eiger the tests are skipped -""" -import pytest -import config_test -from fixtures import detector, eiger, jungfrau, eigertest, jungfrautest -from sls_detector.errors import DetectorValueError - - -@eigertest -def test_set_dynamic_range_and_make_acq(eiger): - eiger.exposure_time = 0.5 - eiger.n_frames = 2 - for dr in [4, 8, 16, 32]: - eiger.dynamic_range = dr - assert eiger.dynamic_range == dr - eiger.acq() - assert eiger.frames_caught == 2 - - -@eigertest -def test_set_dynamic_range_raises(eiger): - with pytest.raises(DetectorValueError): - eiger.dynamic_range = 1 - with pytest.raises(DetectorValueError): - eiger.dynamic_range = 75 - with pytest.raises(DetectorValueError): - eiger.dynamic_range = -3 - with pytest.raises(DetectorValueError): - eiger.dynamic_range = 12 - -@eigertest -def test_set_dynamic_range_reduces_speed(eiger): - eiger.readout_clock = 'Full Speed' - eiger.dynamic_range = 32 - assert eiger.dynamic_range == 32 - assert eiger.readout_clock == 'Quarter Speed' - - eiger.dynamic_range = 16 - assert eiger.dynamic_range == 16 - assert eiger.readout_clock == 'Half Speed' diff --git a/python/simple-integration-tests/eiger/test_eiger_specific.py b/python/simple-integration-tests/eiger/test_eiger_specific.py deleted file mode 100755 index 31f656ab6..000000000 --- a/python/simple-integration-tests/eiger/test_eiger_specific.py +++ /dev/null @@ -1,119 +0,0 @@ -import pytest -import config_test -import time -from sls_detector.errors import DetectorValueError - -from fixtures import eiger, eigertest - - - - - -@eigertest -def test_set_matrix_reset(eiger): - eiger.eiger_matrix_reset = False - assert eiger.eiger_matrix_reset == False - eiger.eiger_matrix_reset = True - assert eiger.eiger_matrix_reset == True - -@eigertest -def test_set_tx_delay_left_single(eiger): - eiger.tx_delay.left[0] = 130 - assert eiger.tx_delay.left[0] == 130 - eiger.tx_delay.left[1] = 150 - assert eiger.tx_delay.left[1] == 150 - eiger.tx_delay.left[0] = 0 - eiger.tx_delay.left[1] = 0 - assert eiger.tx_delay.left[0] == 0 - assert eiger.tx_delay.left[1] == 0 - -@eigertest -def test_set_tx_delay_right_single(eiger): - eiger.tx_delay.right[0] = 130 - assert eiger.tx_delay.right[0] == 130 - eiger.tx_delay.right[1] = 150 - assert eiger.tx_delay.right[1] == 150 - eiger.tx_delay.right[0] = 0 - eiger.tx_delay.right[1] = 0 - assert eiger.tx_delay.right[0] == 0 - assert eiger.tx_delay.right[1] == 0 - -@eigertest -def test_set_tx_delay_frame_single(eiger): - eiger.tx_delay.frame[0] = 500 - eiger.tx_delay.frame[1] = 600 - assert eiger.tx_delay.frame[0] == 500 - assert eiger.tx_delay.frame[1] == 600 - - eiger.tx_delay.frame[0] = 0 - eiger.tx_delay.frame[1] = 0 - assert eiger.tx_delay.frame[0] == 0 - assert eiger.tx_delay.frame[1] == 0 - -@eigertest -def test_tx_delay_from_list(eiger): - eiger.tx_delay.left = [123,456] - assert eiger.tx_delay.left[:] == [123,456] - eiger.tx_delay.right = [789,100] - assert eiger.tx_delay.right[:] == [789,100] - eiger.tx_delay.frame = [1000,90000] - assert eiger.tx_delay.frame[:] == [1000,90000] - - eiger.tx_delay.left = [0, 0] - eiger.tx_delay.right = [0, 0] - eiger.tx_delay.frame = [0, 0] - assert eiger.tx_delay.left[:] == [0, 0] - assert eiger.tx_delay.right[:] == [0, 0] - assert eiger.tx_delay.frame[:] == [0, 0] - -@eigertest -def test_acitve(eiger): - eiger.file_write = False - eiger.reset_frames_caught() - eiger.active[1] = False - eiger.acq() - assert eiger._api.getFramesCaughtByReceiver(1) == 0 - assert eiger._api.getFramesCaughtByReceiver(0) == 1 - eiger.active = True - time.sleep(0.5) - eiger.acq() - assert eiger.frames_caught == 1 - -@eigertest -def test_set_default_settings(eiger): - eiger.default_settings() - assert eiger.n_frames == 1 - assert eiger.exposure_time == 1 - assert eiger.period == 0 - assert eiger.n_cycles == 1 - assert eiger.dynamic_range == 16 - -@eigertest -def test_flowcontrol10g(eiger): - eiger.flowcontrol_10g = True - assert eiger.flowcontrol_10g == True - eiger.flowcontrol_10g = False - assert eiger.flowcontrol_10g == False - -@eigertest -def test_read_vcmp(eiger): - eiger.vthreshold = 1500 - assert eiger.vcmp[:] == [1500]*4*eiger.n_modules - -@eigertest -def test_set_vcmp(eiger): - eiger.vcmp = [1000,1100,1200,1300,1400,1500,1600,1700] - assert eiger.vcmp[:] == [1000,1100,1200,1300,1400,1500,1600,1700] - eiger.vthreshold = 1500 - -#Disabled only works with receiver on the same pc -# @eigertest -# def test_setup500k(): -# from sls_detector import Eiger, free_shared_memory -# free_shared_memory() -# d = Eiger() -# d.setup500k(config_test.known_hostnames) -# d.acq() -# assert d.rx_tcpport == [1954,1955] -# assert d.frames_caught == 1 -# #could assert more setting but if the frame is caught it worked... \ No newline at end of file diff --git a/python/simple-integration-tests/eiger/test_firmware.py b/python/simple-integration-tests/eiger/test_firmware.py deleted file mode 100755 index e3892f696..000000000 --- a/python/simple-integration-tests/eiger/test_firmware.py +++ /dev/null @@ -1,129 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Tests specific for the firmware. - -Check that register values are correct after starting an exposure - -0x4 exposure time -0x5 period -0x6 sub exposure time - -""" -import pytest -import config_test -from fixtures import detector, eiger, jungfrau, eigertest, jungfrautest -from sls_detector.errors import DetectorValueError -from sls_detector.utils import eiger_register_to_time - -# testdata_exptimes = [0.001, 0.002, 0.0236] - -@eigertest -def test_short_exposure_time(eiger): - t = 1.23 - eiger.exposure_time = t - eiger.file_write = False - eiger.start_detector() - eiger.stop_detector() - - #Register 0x4 holds exposure time - reg = eiger.register[0x4] - assert pytest.approx(t, 1e-9) == eiger_register_to_time(reg) - -@eigertest -def test_short_minimal_exposure_time(eiger): - t = 1e-8 - eiger.exposure_time = t - eiger.file_write = False - eiger.start_detector() - eiger.stop_detector() - - #Register 0x4 holds exposure time - reg = eiger.register[0x4] - assert pytest.approx(t, 1e-9) == eiger_register_to_time(reg) - - -@eigertest -def test_long_exposure_time(eiger): - t = 623 - eiger.exposure_time = t - eiger.file_write = False - eiger.start_detector() - eiger.stop_detector() - - # Register 0x4 holds exposure time - reg = eiger.register[0x4] - assert pytest.approx(t, 1e-9) == eiger_register_to_time(reg) - - -@eigertest -def test_short_period(eiger): - t = 0.1 - eiger.exposure_time = 0.001 - eiger.period = t - eiger.file_write = False - eiger.start_detector() - eiger.stop_detector() - - # Register 0x5 holds period - reg = eiger.register[0x5] - assert pytest.approx(t, 1e-9) == eiger_register_to_time(reg) - - -@eigertest -def test_long_period(eiger): - t = 8900 - eiger.exposure_time = 0.001 - eiger.period = t - eiger.file_write = False - eiger.start_detector() - eiger.stop_detector() - - # Register 0x5 holds period - reg = eiger.register[0x5] - assert pytest.approx(t, 1e-9) == eiger_register_to_time(reg) - -@eigertest -def test_zero_period_with_acq(eiger): - t = 0 - eiger.exposure_time = 0.001 - eiger.period = t - eiger.file_write = False - eiger.start_detector() - eiger.stop_detector() - - # Register 0x5 holds period - reg = eiger.register[0x5] - assert pytest.approx(t, 1e-9) == eiger_register_to_time(reg) - - -testdata_times = [0.001, 0.002, 0.0236] -@eigertest -@pytest.mark.parametrize("t", testdata_times) -def test_subexptime(eiger,t): - eiger.sub_exposure_time = t - eiger.file_write = False - eiger.start_detector() - eiger.stop_detector() - - # Register 0x6 holds sub exposure time - # time is stored straight as n clocks - reg = eiger.register[0x6] - assert pytest.approx(t, 1e-9) == reg/100e6 - - -@eigertest -@pytest.mark.parametrize("t", testdata_times) -def test_subdeadtime(eiger, t): - eiger.sub_deadtime = t - eiger.sub_exposure_time = 1 - eiger.sub_exposure_time = 0.001 - eiger.file_write = False - eiger.start_detector() - eiger.stop_detector() - - # Register 0x7 holds sub period - # time is stored straight as n clocks - # exptime+deadtime - reg = eiger.register[0x7] - assert pytest.approx(t, 1e-7) == (reg/100e6-0.001) diff --git a/python/simple-integration-tests/eiger/test_general.py b/python/simple-integration-tests/eiger/test_general.py deleted file mode 100755 index 314f33e3b..000000000 --- a/python/simple-integration-tests/eiger/test_general.py +++ /dev/null @@ -1,187 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -General tests for the Detector class. Should not depend on the connected detector. Aim is to have tests working -for both Jungfrau and Eiger. - -NOTE! Uses hostnames from config_test -""" - -import pytest -import config_test -from fixtures import detector -from sls_detector.errors import DetectorValueError, DetectorError - - - -def test_error_handling(detector): - with pytest.raises(DetectorError): - detector._provoke_error() - -def test_not_busy(detector): - """Test that the detector is not busy from the start""" - assert detector.busy == False - -def test_reset_frames_caught(detector): - detector.file_write = False - detector.acq() - assert detector.frames_caught == 1 - detector.reset_frames_caught() - assert detector.frames_caught == 0 - -def test_set_busy_true_then_false(detector): - """Test both cases of assignment""" - detector.busy = True - assert detector.busy == True - detector.busy = False - assert detector.busy == False - -def test_set_readout_speed(detector): - for s in ['Full Speed', 'Half Speed', 'Quarter Speed', 'Super Slow Speed']: - detector.readout_clock = s - assert detector.readout_clock == s - -def test_wrong_speed_raises_error(detector): - with pytest.raises(KeyError): - detector.readout_clock = 'Something strange' - -def test_readout_clock_remains(detector): - s = detector.readout_clock - try: - detector.readout_clock = 'This does not exists' - except KeyError: - pass - assert detector.readout_clock == s - -def test_len_method(detector): - """to test this we need to know the length, this we get from the configuration of hostnames""" - assert len(detector) == len(config_test.known_hostnames) - -def test_setting_n_cycles_to_zero_gives_error(detector): - with pytest.raises(DetectorValueError): - detector.n_cycles = 0 - -def test_setting_n_cycles_to_negative_gives_error(detector): - with pytest.raises(DetectorValueError): - detector.n_cycles = -50 - -def test_set_cycles_frome_one_to_ten(detector): - for i in range(1,11): - detector.n_cycles = i - assert detector.n_cycles == i - detector.n_cycles = 1 - assert detector.n_cycles == 1 - -def test_get_detector_type(detector): - assert detector.detector_type == config_test.detector_type - - - -def test_set_file_index(detector): - detector.file_index = 5 - assert detector.file_index == 5 - -def test_negative_file_index_raises(detector): - with pytest.raises(ValueError): - detector.file_index = -8 - -def test_setting_file_name(detector): - fname = 'hej' - detector.file_name = fname - assert detector.file_name == fname - -def test_set_file_write(detector): - detector.file_write = True - assert detector.file_write == True - - detector.file_write = False - assert detector.file_write == False - - - -def test_set_high_voltage(detector): - detector.high_voltage = 55 - assert detector.high_voltage == 55 - -def test_negative_voltage_raises(detector): - with pytest.raises(DetectorValueError): - detector.high_voltage = -5 - -def test_high_voltage_raises_on_to_high(detector): - with pytest.raises(DetectorValueError): - detector.high_voltage = 500 - - - -def test_get_image_size(detector): - """Compares with the size in the config file""" - assert detector.image_size.rows == config_test.image_size[0] - assert detector.image_size.cols == config_test.image_size[1] - -def test_get_module_geometry(detector): - """Compares with the size in the config file""" - assert detector.module_geometry.horizontal == config_test.module_geometry[0] - assert detector.module_geometry.vertical == config_test.module_geometry[1] - -def test_set_nframes(detector): - detector.n_frames = 5 - assert detector.n_frames == 5 - detector.n_frames = 1 - assert detector.n_frames == 1 - -def test_set_n_measurements(detector): - detector.n_measurements = 7 - assert detector.n_measurements == 7 - detector.n_measurements = 1 - assert detector.n_measurements == 1 - -def test_negative_nframes_raises(detector): - with pytest.raises(DetectorValueError): - detector.n_frames = -2 - -def test_nmodules(detector): - """Assume that the number of modules should be the same as the number of hostnames""" - assert detector.n_modules == len(config_test.known_hostnames) - -def test_is_detector_online(detector): - assert detector.online == True - -def test_set_online(detector): - detector.online = False - assert detector.online == False - detector.online = True - assert detector.online == True - - - -def test_receiver_is_online(detector): - assert detector.receiver_online == True - -def test_set_receiver_online(detector): - detector.receiver_online = False - assert detector.receiver_online == False - detector.receiver_online = True - assert detector.receiver_online == True - -def test_set_receiver_online_raises_on_non_bool(detector): - with pytest.raises(TypeError): - detector.receiver_online = 'probably not this' - - - - -def test_set_period(detector): - detector.period = 5.123 - assert detector.period == 5.123 - detector.period = 0 - assert detector.period == 0 - - - -def test_set_timing_mode(detector): - detector.timing_mode = 'trigger' - assert detector.timing_mode == 'trigger' - detector.timing_mode = 'auto' - assert detector.timing_mode == 'auto' - - diff --git a/python/simple-integration-tests/eiger/test_load_config.py b/python/simple-integration-tests/eiger/test_load_config.py deleted file mode 100755 index f9aa09de7..000000000 --- a/python/simple-integration-tests/eiger/test_load_config.py +++ /dev/null @@ -1,38 +0,0 @@ - -import pytest -import config_test -import os -dir_path = os.path.dirname(os.path.realpath(__file__)) -from sls_detector.detector import element_if_equal -from sls_detector.errors import DetectorValueError - - -from fixtures import eiger, eigertest - - -@eigertest -def test_load_config_file_eiger(eiger): - """Load a settings file and assert all settings""" - eiger.load_config(os.path.join(dir_path, 'test.config')) - - - assert eiger.rx_tcpport == [1954, 1955] - assert eiger.lock == False - assert eiger.rx_udpport == [50010, 50011, 50004, 50005] - assert eiger.rx_hostname == 'mpc2048' - assert eiger.flipped_data_x[:] == [False, True] - assert eiger.settings_path == config_test.settings_path - assert eiger.file_path == config_test.file_path - assert eiger.vthreshold == 1500 - assert element_if_equal(eiger.dacs.vtr[:]) == 4000 - assert eiger.dynamic_range == 32 - assert eiger.tengiga == False - assert eiger.high_voltage == 150 - assert element_if_equal(eiger.dacs.iodelay[:]) == 660 - -@eigertest -def test_load_parameters_file_eiger(eiger): - """Load a parametes file and assert the settings in the file""" - eiger.load_parameters(os.path.join(dir_path, 'test.par')) - assert element_if_equal(eiger.dacs.vrf[:]) == 3000 - assert eiger.vthreshold == 1800 \ No newline at end of file diff --git a/python/simple-integration-tests/eiger/test_network.py b/python/simple-integration-tests/eiger/test_network.py deleted file mode 100755 index 7d2282b2d..000000000 --- a/python/simple-integration-tests/eiger/test_network.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Tests for network related functions of the detector -""" -import pytest -import config_test -from fixtures import eiger, eigertest, detector - - -# def test_last_client(detector): -# import socket -# # We probably should check for multiple ip's -# myip = socket.gethostbyname_ex(socket.gethostname())[-1][0] -# assert detector.last_client_ip == myip - -def test_get_hostname(detector): - for detector_host, config_host in zip(detector.hostname, config_test.known_hostnames): - assert detector_host == config_host - -def test_hostname_has_same_length_as_n_modules(detector): - assert len(detector.hostname) == detector.n_modules - - -# # def test_get_receiver_hostname(detector): -# # """Assume that the receiver are on the local computer""" -# # import socket -# # host = socket.gethostname().split('.')[0] -# # assert detector.rx_hostname == host - -# def test_set_receiver_hostname(detector): -# import socket -# host = socket.gethostname().split('.')[0] -# phony_host = 'madeup' -# detector.rx_hostname = phony_host -# assert detector.rx_hostname == phony_host -# detector.rx_hostname = host -# assert detector.rx_hostname == host - -@eigertest -def test_set_rx_zmqport_single_value(eiger): - eiger.rx_zmqport = 35000 - assert eiger.rx_zmqport == [35000, 35001, 35002, 35003] - -@eigertest -def test_set_rx_zmqport_list(eiger): - eiger.rx_zmqport = [37000, 38000] - assert eiger.rx_zmqport == [37000, 37001, 38000, 38001] - -@eigertest -def test_set_rx_updport(eiger): - ports = [60010,60011,60012,60013] - eiger.rx_udpport = ports - assert eiger.rx_udpport == ports - eiger.acq() - assert eiger.frames_caught == 1 - -@eigertest -def test_rx_tcpport(eiger): - ports = eiger.rx_tcpport - eiger.rx_tcpport = [2000,2001] - assert eiger.rx_tcpport == [2000,2001] - eiger.rx_tcpport = ports - assert eiger.rx_tcpport == ports - eiger.acq() - assert eiger.frames_caught == 1 - -# @eigertest -# @pytest.mark.new -# def test_enable_disable_tengiga(eiger): -# """ -# This test does not check for dat on the 10Gbit link, only the set and get functions -# """ -# eiger.tengiga = True -# assert eiger.tengiga == True -# eiger.tengiga = False -# assert eiger.tengiga == False - - - -#TODO! Add test for Jungfrau \ No newline at end of file diff --git a/python/simple-integration-tests/eiger/test_paths_and_files.py b/python/simple-integration-tests/eiger/test_paths_and_files.py deleted file mode 100755 index 7728c17ac..000000000 --- a/python/simple-integration-tests/eiger/test_paths_and_files.py +++ /dev/null @@ -1,54 +0,0 @@ -import pytest -import config_test -from fixtures import detector, eiger, jungfrau, eigertest, jungfrautest -from sls_detector.errors import DetectorValueError - - - - -@eigertest -@pytest.mark.local -def test_set_path(eiger, tmpdir): - import os - path = os.path.join(tmpdir.dirname, tmpdir.basename) - eiger.file_path = path - assert eiger.file_path == path - -@eigertest -@pytest.mark.local -def test_set_path_and_write_files(eiger, tmpdir): - import os - prefix = 'testprefix' - path = os.path.join(tmpdir.dirname, tmpdir.basename) - eiger.file_path = path - eiger.file_write = True - eiger.exposure_time = 0.1 - eiger.n_frames = 1 - eiger.timing_mode = 'auto' - eiger.file_name = prefix - eiger.file_index = 0 - eiger.acq() - - files = [f.basename for f in tmpdir.listdir()] - - assert len(files) == 5 - assert (prefix+'_d0_0.raw' in files) == True - assert (prefix+'_d1_0.raw' in files) == True - assert (prefix+'_d2_0.raw' in files) == True - assert (prefix+'_d3_0.raw' in files) == True - -def test_set_discard_policy(detector): - detector.frame_discard_policy = 'nodiscard' - assert detector.frame_discard_policy == 'nodiscard' - detector.frame_discard_policy = 'discardpartial' - assert detector.frame_discard_policy == 'discardpartial' - detector.frame_discard_policy = 'discardempty' - assert detector.frame_discard_policy == 'discardempty' - -def test_set_discard_policy_raises(detector): - with pytest.raises(ValueError): - detector.frame_discard_policy = 'adjfvadksvsj' - -def test_set_frames_perfile(detector): - detector.frames_per_file = 5000 - assert detector.frames_per_file == 5000 \ No newline at end of file diff --git a/python/simple-integration-tests/eiger/test_threshold.py b/python/simple-integration-tests/eiger/test_threshold.py deleted file mode 100755 index 0eb3b3ed5..000000000 --- a/python/simple-integration-tests/eiger/test_threshold.py +++ /dev/null @@ -1,47 +0,0 @@ -import pytest -import config_test -import time -from sls_detector.errors import DetectorValueError -import os -from fixtures import eiger, eigertest - - -testdata_th = [0,333,500,1750,2000] - -@eigertest -@pytest.mark.parametrize("th", testdata_th) -def test_set_vthreshold(eiger, th): - eiger.vthreshold = th - assert eiger.vthreshold == th - -@eigertest -def test_vthreshold_with_different_vcmp(eiger): - #When vcmp is different for the chip vthreshold should return -1 - eiger.vthreshold = 1500 - eiger.dacs.vcmp_ll = 1400 - assert eiger.vthreshold == -1 - -@eigertest -def test_set_settingsdir(eiger): - path = os.path.dirname( os.path.realpath(__file__) ) - path = os.path.join(path, 'settingsdir') - eiger.settings_path = path - assert eiger.settings_path == path - -@eigertest -def test_set_trimmed_energies(eiger): - en = [5000,6000,7000] - eiger.trimmed_energies = en - assert eiger.trimmed_energies == en - - -#TODO! add checks for vcmp as well and improve naming -#TODO! remove dependency on beb number -testdata_en = [(5000, 500),(5500,750),(6000,1000),(6200,1100),(7000,1500)] -@eigertest -@pytest.mark.parametrize('val', testdata_en) -def test_set_energy_threshold(eiger, val): - eiger.settings = 'standard' - eiger.threshold = val[0] - assert eiger.threshold == val[0] - assert eiger.dacs.vrf[0] == val[1] \ No newline at end of file diff --git a/python/simple-integration-tests/eiger/test_time.py b/python/simple-integration-tests/eiger/test_time.py deleted file mode 100755 index 017eed3e4..000000000 --- a/python/simple-integration-tests/eiger/test_time.py +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Tests regarding exposure time and period of the detector -Set and get test as well as test for duration and on detector -measurement of the time. -""" -import pytest -import config_test -from fixtures import detector, eiger, jungfrau, eigertest, jungfrautest -from sls_detector.errors import DetectorValueError, DetectorError -import time - - -testdata_times = [1e-8, 0.001, 0.5, 3.125, 5.0, 600, 784] -@pytest.mark.parametrize("t", testdata_times) -def test_set_and_get_exposure_time(eiger, t): - """ - Test that the exposure time we set in the detector - is the same as the one read back - """ - eiger.exposure_time = t - assert eiger.exposure_time == t - - -def test_negative_exposure_time_raises_error(eiger): - with pytest.raises(DetectorValueError): - eiger.exposure_time = -15 - - -testdata_times = [0.001, 0.0025, 0.005, 5] -@pytest.mark.parametrize("t", testdata_times) -def test_set_subexptime(eiger, t): - eiger.sub_exposure_time = t - assert eiger.sub_exposure_time == t - - -testdata_times = [-5,6,7,50] -@pytest.mark.parametrize("t", testdata_times) -def test_set_subextime_too_large_or_neg(eiger, t): - with pytest.raises((DetectorError, DetectorValueError)): - eiger.sub_exposure_time = t - - - -testdata_times = [0.2, 0.5, 1, 2, 5, 7] -@pytest.mark.slow -@pytest.mark.parametrize("t", testdata_times) -def test_measure_exposure_time_from_python(eiger, t): - """ - The main idea with this test is to make sure the overhead of a - single acq is less than tol[s]. This test also catches stupid bugs - that would for example not change the exposure time or make acquire - not blocking. - """ - tol = 0.5 - eiger.dynamic_range = 16 - eiger.file_write = False - eiger.n_frames = 1 - eiger.exposure_time = t - assert eiger.exposure_time == t - t0 = time.time() - eiger.acq() - duration = time.time()-t0 - assert duration < (t+tol) - - -testdata_times = [0.5, 1, 3, 5] - - -@pytest.mark.slow -@pytest.mark.parametrize("t", testdata_times) -def test_measure_period_from_python_and_detector(eiger, t): - tol = 0.5 - nframes = 5 - eiger.dynamic_range = 16 - eiger.file_write = False - eiger.n_frames = nframes - eiger.exposure_time = 0.001 - eiger.period = t - t0 = time.time() - eiger.acq() - duration = time.time()-t0 - assert duration < t*(nframes-1)+tol - for mp in eiger.measured_period: - assert pytest.approx(mp, 1e-5) == t - - -testdata_times = [0.001, 0.002, 0.003, 0.005, 0.01] -@pytest.mark.parametrize("t", testdata_times) -def test_measure_subperiod_nonparallel(eiger, t): - readout_time = 500e-6 - eiger.dynamic_range = 32 - eiger.file_write = False - eiger.flags = 'nonparallel' - eiger.n_frames = 1 - eiger.period = 0 - eiger.exposure_time = 0.5 - eiger.sub_exposure_time = t - eiger.sub_deadtime = 0 - eiger.acq() - for mp in eiger.measured_subperiod: - assert pytest.approx(mp, abs=1e-5) == t+readout_time - - -@pytest.mark.parametrize("t", testdata_times) -def test_measure_subperiod_parallel(eiger, t): - readout_time = 12e-6 - eiger.dynamic_range = 32 - eiger.file_write = False - eiger.flags = 'parallel' - eiger.n_frames = 1 - eiger.period = 0 - eiger.exposure_time = 0.5 - eiger.sub_exposure_time = t - eiger.sub_deadtime = 0 - eiger.acq() - for mp in eiger.measured_subperiod: - assert pytest.approx(mp, abs=1e-5) == t+readout_time - - -@pytest.mark.parametrize("t", testdata_times) -def test_measure_subperiod_parallel_when_changing_deadtime(eiger, t): - readout_time = 12e-6 - exposure_time = 0.001 - eiger.dynamic_range = 32 - eiger.file_write = False - eiger.flags = 'parallel' - eiger.n_frames = 1 - eiger.period = 0 - eiger.exposure_time = 0.5 - eiger.sub_exposure_time = exposure_time - eiger.sub_deadtime = t - eiger.acq() - for mp in eiger.measured_subperiod: - assert pytest.approx(mp, abs=1e-5) == t+exposure_time \ No newline at end of file diff --git a/python/simple-integration-tests/eiger/test_trimbits_and_dacs.py b/python/simple-integration-tests/eiger/test_trimbits_and_dacs.py deleted file mode 100755 index 3053ca75f..000000000 --- a/python/simple-integration-tests/eiger/test_trimbits_and_dacs.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Tests for trimbit and dac related functions -""" -import pytest -import config_test -from fixtures import detector, eiger, jungfrau, eigertest, jungfrautest -from sls_detector.errors import DetectorValueError - - -@eigertest -def test_set_trimbits(eiger): - """Limited values due to time""" - for i in [17, 32, 60]: - print(i) - eiger.trimbits = i - assert eiger.trimbits == i - -@eigertest -def test_set_trimbits_raises_on_too_big(eiger): - with pytest.raises(DetectorValueError): - eiger.trimbits = 75 - -@eigertest -def test_set_trimbits_raises_on_negative(eiger): - with pytest.raises(DetectorValueError): - eiger.trimbits = -5 - - -# @jungfrautest -# def test_jungfrau(jungfrau): -# """Example of a test that is not run with Eiger connected""" -# pass diff --git a/python/simple-integration-tests/eiger/test_version_numbers.py b/python/simple-integration-tests/eiger/test_version_numbers.py deleted file mode 100755 index 246712254..000000000 --- a/python/simple-integration-tests/eiger/test_version_numbers.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Tests for hostname related functions of the detector -""" -import pytest -import config_test -from fixtures import detector, eiger, jungfrau, eigertest, jungfrautest -from sls_detector.errors import DetectorValueError - - - -def test_firmware_version(detector): - assert detector.firmware_version == config_test.fw_version - - diff --git a/python/simple-integration-tests/eiger/write_tb_files.py b/python/simple-integration-tests/eiger/write_tb_files.py deleted file mode 100755 index b8ec9ba38..000000000 --- a/python/simple-integration-tests/eiger/write_tb_files.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Tue May 22 14:13:48 2018 - -@author: l_frojdh -""" -import os -from sls_detector_tools.io import write_trimbit_file -from sls_detector_tools import mask - -energy = [5000, 6000, 7000] -vrf = [500, 1000, 1500] - -for i,e in enumerate(energy): - dacs = np.array( [[ 0., 0.], #vsvp - [4000., 4000.], #vtr - [vrf[i], vrf[i]], #vrf - [1400., 1400.], #vrs - [4000., 4000.], #vsvn - [2556., 2556.], #vtgstv - [1400., 1400.], #vcmp_ll - [1500., 1500.], #vcmp_lr - [4000., 4000.], #vcall - [1500., 1500.], #vcmp_rl - [1100., 1100.], #rxb_rb - [1100., 1100.], #rxb_lb - [1500., 1500.], #vcmp_rr - [1500., 1500.], #vcp - [2000., 2000.], #vcn - [1550., 1550.], #vis - [ 660., 660.], #iodelay - [ 0., 0.], #tau - ]) - - tb = np.zeros((256,1024)) - - for beb in [83,98]: - write_trimbit_file(f'settingsdir/standard/{e}eV/noise.sn{beb:03d}', tb, dacs[:,0]) -#print(os.getcwd()) - -#print( os.path.realpath(__file__)) \ No newline at end of file diff --git a/python/simple-integration-tests/jungfrau_0_6/config_test.py b/python/simple-integration-tests/jungfrau_0_6/config_test.py deleted file mode 100755 index 045d04d8e..000000000 --- a/python/simple-integration-tests/jungfrau_0_6/config_test.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Tue Nov 14 16:49:07 2017 - -@author: l_frojdh -""" - -fw_version = 0x180220 -detector_type = 'Jungfrau' -known_hostnames = ['bchip038'] -image_size = (512,1024) #rows, cols -module_geometry = (1,1) #horizontal, vertical - -#Remember to change these in the settings file as well! -settings_path = '/home/l_lopez/projects/slsDetectorPackage/settingsdir/jungfrau' -file_path = '/home/l_lopez/out' \ No newline at end of file diff --git a/python/simple-integration-tests/jungfrau_0_6/fixtures.py b/python/simple-integration-tests/jungfrau_0_6/fixtures.py deleted file mode 100755 index d99c9e08f..000000000 --- a/python/simple-integration-tests/jungfrau_0_6/fixtures.py +++ /dev/null @@ -1,23 +0,0 @@ -import pytest - -from sls_detector import Detector - -@pytest.fixture -def detector(): - from sls_detector import Detector - return Detector() - -@pytest.fixture -def eiger(): - from sls_detector import Eiger - return Eiger() - - -@pytest.fixture -def jungfrau(): - from sls_detector import Jungfrau - return Jungfrau() - -detector_type = Detector().detector_type -eigertest = pytest.mark.skipif(detector_type != 'Eiger', reason = 'Only valid for Eiger') -jungfrautest = pytest.mark.skipif(detector_type != 'Jungfrau', reason = 'Only valid for Jungfrau') \ No newline at end of file diff --git a/python/simple-integration-tests/jungfrau_0_6/test_main.py b/python/simple-integration-tests/jungfrau_0_6/test_main.py deleted file mode 100755 index 948e0b172..000000000 --- a/python/simple-integration-tests/jungfrau_0_6/test_main.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -General tests for the Jungfrau detector. - -NOTE! Uses hostnames from config_test -""" - -import pytest -import config_test -import tests - -import os -dir_path = os.path.dirname(os.path.realpath(__file__)) - -pytest.main(['-x', '-s', os.path.join(dir_path, 'tests/test_load_config.py')]) #Test 1 -pytest.main(['-x', '-s', os.path.join(dir_path, 'tests/test_overtemperature.py')]) #Test 2 diff --git a/python/simple-integration-tests/jungfrau_0_6/tests/test.config b/python/simple-integration-tests/jungfrau_0_6/tests/test.config deleted file mode 100755 index 8ac8d98d8..000000000 --- a/python/simple-integration-tests/jungfrau_0_6/tests/test.config +++ /dev/null @@ -1,21 +0,0 @@ -detsizechan 1024 512 - -settingsdir /home/l_lopez/projects/slsDetectorPackage/settingsdir/jungfrau -caldir /home/l_lopez/projects/slsDetectorPackage/settingsdir/jungfrau -lock 0 - -hostname bchip094+ - -rx_udpport 1754 -rx_udpip 10.1.1.107 -rx_udpmac 90:E2:BA:9A:4F:D4 -detectorip 10.1.1.9 -detectormac 00:aa:bb:cc:dd:ee -configuremac 0 - -powerchip 1 -timing auto - -outdir /home/l_lopez/out -threaded 1 -high diff --git a/python/simple-integration-tests/jungfrau_0_6/tests/test.par b/python/simple-integration-tests/jungfrau_0_6/tests/test.par deleted file mode 100755 index 78fb87f03..000000000 --- a/python/simple-integration-tests/jungfrau_0_6/tests/test.par +++ /dev/null @@ -1 +0,0 @@ -highvoltage 200 \ No newline at end of file diff --git a/python/simple-integration-tests/jungfrau_0_6/tests/test_load_config.py b/python/simple-integration-tests/jungfrau_0_6/tests/test_load_config.py deleted file mode 100755 index de29b41b8..000000000 --- a/python/simple-integration-tests/jungfrau_0_6/tests/test_load_config.py +++ /dev/null @@ -1,43 +0,0 @@ - -import pytest -import config_test -import os -dir_path = os.path.dirname(os.path.realpath(__file__)) - -from fixtures import jungfrau, jungfrautest - - -def load_config_file_jungfrau_test(jungfrau): - """Load a settings file and assert all settings""" - - print('\tStarting load_config_file_jungfrau_test test case') - - jungfrau.free_shared_memory - jungfrau.load_config(os.path.join(dir_path, 'test.config')) - - assert jungfrau.lock == False - assert jungfrau.rx_udpport == ['1754'] - assert jungfrau.hostname == ['bchip094'] - assert jungfrau.firmware_version == config_test.fw_version - - print('\tFinished load_config_file_jungfrau_test test case') - -def load_parameters_file_jungfrau_test(jungfrau): - """Load a parametes file and assert the settings in the file""" - - print('\tStarting load_parameters_file_jungfrau_test test case') - - jungfrau.load_parameters(os.path.join(dir_path, 'test.par')) - assert jungfrau.high_voltage == 200 - - print('\tFinished load_parameters_file_jungfrau_test test case') - -@jungfrautest -def test_main(jungfrau): - print('\nTesting configuration file loading') - - load_config_file_jungfrau_test(jungfrau) - load_parameters_file_jungfrau_test(jungfrau) - - print('Tested configuration file loading') - diff --git a/python/simple-integration-tests/jungfrau_0_6/tests/test_overtemperature.py b/python/simple-integration-tests/jungfrau_0_6/tests/test_overtemperature.py deleted file mode 100755 index 0bcbbfc24..000000000 --- a/python/simple-integration-tests/jungfrau_0_6/tests/test_overtemperature.py +++ /dev/null @@ -1,68 +0,0 @@ - -import pytest -import config_test -import time -from fixtures import jungfrau, jungfrautest - -def powerchip_test(jungfrau, control): - """ - - Test the main overtemperature protection control - - """ - #Set test initial conditions - print('\tStarting powerchip_test test case') - - jungfrau.power_chip = False - jungfrau.temperature_control = control - assert jungfrau.power_chip == False - jungfrau.temperature_threshold = 35 - jungfrau.power_chip = True - - - if jungfrau.temperature_control is True: - if jungfrau.temperature_event is True: - assert jungfrau.power_chip == False - jungfrau.power_chip = True - assert jungfrau.power_chip == False - jungfrau.temperature_control = False - assert jungfrau.power_chip == True - jungfrau.temperature_control = True - jungfrau.temperature_threshold = 50 - assert jungfrau.power_chip == False - - print('\t\tWaiting to cool down the board. This may take a while...') - while jungfrau.temperature_threshold < jungfrau.temp.fpga[0]: - time.sleep(5) - print('\t\tJungfrau MCB temperature: {0:.2f} °C'.format(jungfrau.temp.fpga[0])) - - #Leave enough time to let the board cool down a bit more - time.sleep(30) - jungfrau.reset_temperature_event() - - assert jungfrau.temperature_event == False - assert jungfrau.power_chip == True - - else: - assert jungfrau.power_chip == True - else: - print('\t\tWaiting to warm up the board. This may take a while...') - while jungfrau.temperature_threshold > jungfrau.temp.fpga[0]: - time.sleep(5) - print('\t\tJungfrau MCB temperature: {0:.2f} °C'.format(jungfrau.temp.fpga[0])) - - assert jungfrau.temperature_event == False - assert jungfrau.power_chip == True - - print('\tFinished powerchip_test test case') - - -#@jungfrautest -def test_main(jungfrau): - - print('\nTesting overtemperature protection control') - - powerchip_test(jungfrau, False) - powerchip_test(jungfrau, True) - - print('Tested overtemperature protection control') diff --git a/python/tests/dac_test.py b/python/tests/dac_test.py deleted file mode 100755 index 90341fcaa..000000000 --- a/python/tests/dac_test.py +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Testing setting and getting dacs from the detector -""" -from unittest.mock import Mock, call -import pytest -from pytest_mock import mocker -import numpy as np - -from sls_detector import Eiger -from sls_detector import DetectorApi - - -def test_get_vrf_for_three_mod(mocker): - m2= mocker.patch.object(DetectorApi, 'getNumberOfDetectors', autospec=True) - m2.return_value = 3 - m = mocker.patch.object(DetectorApi, 'getDac', autospec=True) - m.return_value = 1560 - d = Eiger() - vrf = d.dacs.vrf[:] - assert vrf == [1560, 1560, 1560] - -def test_set_vrf_for_three_mod_same_value(mocker): - m2= mocker.patch.object(DetectorApi, 'getNumberOfDetectors', autospec=True) - m2.return_value = 3 - m = mocker.patch.object(DetectorApi, 'setDac', autospec=True) -# m.return_value = 1560 - d = Eiger() - d.dacs.vrf[:] = 1500 - calls = [call('vrf', 0, 1500), call('vrf', 1, 1500), call('vrf', 2, 1500)] - m.assert_has_calls(calls) - assert m.call_count == 3 - -def test_set_vrf_for_four_mod_different_value(mocker): - m2= mocker.patch.object(DetectorApi, 'getNumberOfDetectors', autospec=True) - m2.return_value = 4 - m = mocker.patch.object(DetectorApi, 'setDac', autospec=True) -# m.return_value = 1560 - d = Eiger() - d.dacs.vrf = [1500, 1600, 1800, 1502] - calls = [call('vrf', 0, 1500), - call('vrf', 1, 1600), - call('vrf', 2, 1800), - call('vrf', 3, 1502)] - m.assert_has_calls(calls) - assert m.call_count == 4 - -def test_set_vrf_for_four_mod_different_value_slice(mocker): - m2= mocker.patch.object(DetectorApi, 'getNumberOfDetectors', autospec=True) - m2.return_value = 4 - m = mocker.patch.object(DetectorApi, 'setDac', autospec=True) -# m.return_value = 1560 - d = Eiger() - d.dacs.vrf[:] = [1500, 1600, 1800, 1502] - calls = [call('vrf', 0, 1500), - call('vrf', 1, 1600), - call('vrf', 2, 1800), - call('vrf', 3, 1502)] - m.assert_has_calls(calls) - assert m.call_count == 4 - -def test_set_vcp_single_call(mocker): - m2= mocker.patch.object(DetectorApi, 'getNumberOfDetectors', autospec=True) - m2.return_value = 2 - m = mocker.patch.object(DetectorApi, 'setDac', autospec=True) -# m.return_value = 1560 - d = Eiger() - d.dacs.vcp[1] = 1637 - m.assert_called_once_with('vcp', 1, 1637) - -def test_iterate_on_index_call_vcn(mocker): - m2= mocker.patch.object(DetectorApi, 'getNumberOfDetectors', autospec=True) - m2.return_value = 10 - m = mocker.patch.object(DetectorApi, 'setDac', autospec=True) -# m.return_value = 1560 - d = Eiger() - d.dacs.vcn[0,3,8] = 1532 - calls = [call('vcn', 0, 1532), - call('vcn', 3, 1532), - call('vcn', 8, 1532)] - m.assert_has_calls(calls) - assert m.call_count == 3 - -def test_set_dac_from_element_in_numpy_array(mocker): - m2= mocker.patch.object(DetectorApi, 'getNumberOfDetectors', autospec=True) - m2.return_value = 2 - m = mocker.patch.object(DetectorApi, 'setDac', autospec=True) - d = Eiger() - - vrf = np.array((1600,1700,1800)) - d.dacs.vrf = vrf[0] - calls = [call('vrf', 0, 1600), - call('vrf', 1, 1600),] - m.assert_has_calls(calls) - assert m.call_count == 2 - -def test_set_dac_from_element_in_numpy_array_using_slice(mocker): - m2= mocker.patch.object(DetectorApi, 'getNumberOfDetectors', autospec=True) - m2.return_value = 2 - m = mocker.patch.object(DetectorApi, 'setDac', autospec=True) - d = Eiger() - - vrf = np.array((1600,1700,1800)) - d.dacs.vrf[:] = vrf[0] - calls = [call('vrf', 0, 1600), - call('vrf', 1, 1600),] - m.assert_has_calls(calls) - assert m.call_count == 2 - -def test_set_eiger_default(mocker): - m2= mocker.patch.object(DetectorApi, 'getNumberOfDetectors', autospec=True) - m2.return_value = 2 - m = mocker.patch.object(DetectorApi, 'setDac', autospec=True) -# m.return_value = 1560 - d = Eiger() - d.dacs.set_default() - calls = [call('vsvp', 0, 0), - call('vsvp', 1, 0), - call('vtr', 0, 2500), - call('vtr', 1, 2500), - call('vrf', 0, 3300), - call('vrf', 1, 3300), - call('vrs', 0, 1400), - call('vrs', 1, 1400), - call('vsvn', 0, 4000), - call('vsvn', 1, 4000), - call('vtgstv', 0, 2556), - call('vtgstv', 1, 2556), - call('vcmp_ll', 0, 1500), - call('vcmp_ll', 1, 1500), - call('vcmp_lr', 0, 1500), - call('vcmp_lr', 1, 1500), - call('vcall', 0, 4000), - call('vcall', 1, 4000), - call('vcmp_rl', 0, 1500), - call('vcmp_rl', 1, 1500), - call('rxb_rb', 0, 1100), - call('rxb_rb', 1, 1100), - call('rxb_lb', 0, 1100), - call('rxb_lb', 1, 1100), - call('vcmp_rr', 0, 1500), - call('vcmp_rr', 1, 1500), - call('vcp', 0, 200), - call('vcp', 1, 200), - call('vcn', 0, 2000), - call('vcn', 1, 2000), - call('vis', 0, 1550), - call('vis', 1, 1550), - call('iodelay', 0, 660), - call('iodelay', 1, 660)] - - m.assert_has_calls(calls) - assert m.call_count == 17*2 - -def test_set_eiger_set_from_array_call_count(mocker): - import numpy as np - m2= mocker.patch.object(DetectorApi, 'getNumberOfDetectors', autospec=True) - m2.return_value = 3 - m = mocker.patch.object(DetectorApi, 'setDac', autospec=True) -# m.return_value = 1560 - d = Eiger() - d.dacs.set_from_array( np.zeros((17,3))) - assert m.call_count == 17*3 - -def test_get_fpga_temp(mocker): - m2= mocker.patch.object(DetectorApi, 'getNumberOfDetectors', autospec=True) - m2.return_value = 2 - m = mocker.patch.object(DetectorApi, 'getAdc', autospec=True) - m.return_value = 34253 - d = Eiger() - t = d.temp.fpga[:] - assert t == [34.253, 34.253] \ No newline at end of file diff --git a/python/tests/detector_eiger.py b/python/tests/detector_eiger.py deleted file mode 100755 index cc36e93e3..000000000 --- a/python/tests/detector_eiger.py +++ /dev/null @@ -1,489 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Testing parameters and methods of the Detector class using mocks -""" -from unittest.mock import Mock -import pytest -from pytest_mock import mocker - - - -@pytest.fixture -def d(): - from sls_detector import Eiger - return Eiger() - - -def test_acq_call(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.acq') - d.acq() - m.assert_called_once_with() - -def test_busy_call(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getAcquiringFlag') - m.return_value = False - assert d.busy == False - - -def test_assign_to_detector_type(d): - with pytest.raises(AttributeError): - d.detector_type = 'Eiger' - -def test_det_type(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getDetectorType') - m.return_value = 'Eiger' - assert d.detector_type == 'Eiger' - -def test_set_dynamic_range_4(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setDynamicRange') - d.dynamic_range = 4 - m.assert_called_with(4) - -def test_set_dynamic_range_8(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setDynamicRange') - d.dynamic_range = 8 - m.assert_called_with(8) - - -def test_set_dynamic_range_16(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setDynamicRange') - d.dynamic_range = 16 - m.assert_called_with(16) - -def test_set_dynamic_range_32(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setDynamicRange') - d.dynamic_range = 32 - m.assert_called_with(32) - -def test_set_dynamic_range_raises_exception(d, mocker): - mocker.patch('_slsdet.DetectorApi.setDynamicRange') - with pytest.raises(ValueError): - d.dynamic_range = 17 - -def test_get_dynamic_range_32(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getDynamicRange') - m.return_value = 32 - dr = d.dynamic_range - assert dr == 32 - -def test_eiger_matrix_reset(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getCounterBit') - m.return_value = True - assert d.eiger_matrix_reset == True - -def test_set_eiger_matrix_reset(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setCounterBit') - d.eiger_matrix_reset = True - m.assert_called_once_with(True) - - -def test_get_exposure_time(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getExposureTime') - m.return_value = 100000000 - assert d.exposure_time == 0.1 - -def test_set_exposure_time(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setExposureTime') - d.exposure_time = 1.5 - m.assert_called_once_with(1500000000) - -def test_set_exposure_time_less_than_zero(d, mocker): - mocker.patch('_slsdet.DetectorApi.setExposureTime') - with pytest.raises(ValueError): - d.exposure_time = -7 - - -def test_get_file_index(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getFileIndex') - m.return_value = 8 - assert d.file_index == 8 - -def test_set_file_index(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setFileIndex') - d.file_index = 9 - m.assert_called_with(9) - - -def test_set_file_index_raises_on_neg(d, mocker): - mocker.patch('_slsdet.DetectorApi.setFileIndex') - with pytest.raises(ValueError): - d.file_index = -9 - - -def test_get_file_name(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getFileName') - d.file_name - m.assert_called_once_with() - -def test_set_file_name(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setFileName') - d.file_name = 'hej' - m.assert_called_once_with('hej') - -def test_get_file_path(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getFilePath') - d.file_path - m.assert_called_once_with() - -def test_set_file_path_when_path_exists(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setFilePath') - #To avoid raising an exception because path is not there - mock_os = mocker.patch('os.path.exists') - mock_os.return_value = True - d.file_path = '/path/to/something/' - m.assert_called_once_with('/path/to/something/') - -def test_set_file_path_raises_when_not_exists(d, mocker): - mocker.patch('_slsdet.DetectorApi.setFilePath') - mock_os = mocker.patch('os.path.exists') - mock_os.return_value = False - with pytest.raises(FileNotFoundError): - d.file_path = '/path/to/something/' - -def test_get_file_write(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getFileWrite') - m.return_value = False - assert d.file_write == False - -def test_set_file_write(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setFileWrite') - d.file_write = True - m.assert_called_once_with(True) - - -def test_get_firmware_version(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getFirmwareVersion') - m.return_value = 20 - assert d.firmware_version == 20 - -def test_cannot_set_fw_version(d): - with pytest.raises(AttributeError): - d.firmware_version = 20 - -def test_get_high_voltage_call_signature(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getDac') - d.high_voltage - m.assert_called_once_with('highvoltage', -1) - -def test_get_high_voltage(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getDac') - m.return_value = 80 - assert d.high_voltage == 80 - -#self._api.setDac('highvoltage', -1, voltage) -def test_set_high_voltage(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setDac') - d.high_voltage = 80 - m.assert_called_once_with('highvoltage', -1, 80) - -def test_decode_hostname_two_names(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getHostname') - m.return_value = 'beb059+beb048+' - assert d.hostname == ['beb059', 'beb048'] - -def test_decode_hostname_four_names(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getHostname') - m.return_value = 'beb059+beb048+beb120+beb153+' - assert d.hostname == ['beb059', 'beb048', 'beb120', 'beb153'] - -def test_decode_hostname_blank(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getHostname') - m.return_value = '' - assert d.hostname == [] - -def test_get_image_size_gives_correct_size(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getImageSize') - m.return_value = (512,1024) - im_size = d.image_size - assert im_size.rows == 512 - assert im_size.cols == 1024 - - - -def test_load_config(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.readConfigurationFile') - #To avoid raising an exception because path is not there - mock_os = mocker.patch('os.path.isfile') - mock_os.return_value = True - d.load_config('/path/to/my/file.config') - m.assert_called_once_with('/path/to/my/file.config') - -def test_load_config_raises_when_file_is_not_found(d, mocker): - mocker.patch('_slsdet.DetectorApi.readConfigurationFile') - mock_os = mocker.patch('os.path.isfile') - mock_os.return_value = False - with pytest.raises(FileNotFoundError): - d.load_config('/path/to/my/file.config') - -def test_load_parameters(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.readParametersFile') - #To avoid raising an exception because path is not there - mock_os = mocker.patch('os.path.isfile') - mock_os.return_value = True - d.load_parameters('/path/to/my/file.par') - m.assert_called_once_with('/path/to/my/file.par') - -def test_load_parameters_raises_when_file_is_not_found(d, mocker): - mocker.patch('_slsdet.DetectorApi.readParametersFile') - mock_os = mocker.patch('os.path.isfile') - mock_os.return_value = False - with pytest.raises(FileNotFoundError): - d.load_parameters('/path/to/my/file.par') - -#getDetectorGeometry -def test_get_module_geometry_gives_correct_size(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getDetectorGeometry') - m.return_value = (13,7) - g = d.module_geometry - assert g.vertical == 7 - assert g.horizontal == 13 - -def test_get_module_geometry_access(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getDetectorGeometry') - m.return_value = (12,3) - assert d.module_geometry[0] == 12 - assert d.module_geometry[1] == 3 - assert d.module_geometry.vertical == 3 - assert d.module_geometry.horizontal == 12 - -def test_get_n_frames(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getNumberOfFrames') - m.return_value = 3 - assert d.n_frames == 3 - -def test_set_n_frames(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setNumberOfFrames') - d.n_frames = 9 - m.assert_called_once_with(9) - -def test_set_n_frames_raises_on_neg(d, mocker): - mocker.patch('_slsdet.DetectorApi.setNumberOfFrames') - with pytest.raises(ValueError): - d.n_frames = -1 - -def test_set_n_frames_raises_on_zero(d, mocker): - mocker.patch('_slsdet.DetectorApi.setNumberOfFrames') - with pytest.raises(ValueError): - d.n_frames = 0 - -def test_get_n_modules(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getNumberOfDetectors') - m.return_value = 12 - assert d.n_modules == 12 - -def test_get_period_time(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getPeriod') - m.return_value = 130000000 - assert d.period == 0.13 - -def test_set_period_time(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setPeriod') - d.period = 1.953 - m.assert_called_once_with(1953000000) - -def test_set_period_time_less_than_zero(d, mocker): - mocker.patch('_slsdet.DetectorApi.setPeriod') - with pytest.raises(ValueError): - d.period = -7 - -def test_pulse_chip_call(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.pulseChip') - d.pulse_chip(15) - m.assert_called_once_with(15) - -def test_pulse_chip_call_minus_one(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.pulseChip') - d.pulse_chip(-1) - m.assert_called_once_with(-1) - -def test_pulse_chip_asserts_on_smaller_than_minus_one(d, mocker): - mocker.patch('_slsdet.DetectorApi.pulseChip') - with pytest.raises(ValueError): - d.pulse_chip(-3) -#--------------------------------------------------------------------subexptime -def test_get_sub_exposure_time(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getSubExposureTime') - m.return_value = 2370000 - assert d.sub_exposure_time == 0.00237 - - -def test_set_sub_exposure_time(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setSubExposureTime') - d.sub_exposure_time = 0.002 - m.assert_called_once_with(2000000) - -def test_set_sub_exposure_time_raises_on_zero(d, mocker): - mocker.patch('_slsdet.DetectorApi.setSubExposureTime') - with pytest.raises(ValueError): - d.sub_exposure_time = 0 - -#-------------------------------------------------------------Rate correction -def test_get_rate_correction(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getRateCorrection') - m.return_value = [132,129] - assert d.rate_correction == [132,129] - -def test_set_rate_correction(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setRateCorrection') - mock_n = mocker.patch('_slsdet.DetectorApi.getNumberOfDetectors') - mock_n.return_value = 3 - d.rate_correction = [123,90,50] - m.assert_called_once_with([123,90,50]) - -def test_set_rate_correction_raises_on_wrong_number_of_values(d, mocker): - mocker.patch('_slsdet.DetectorApi.setRateCorrection') - mock_n = mocker.patch('_slsdet.DetectorApi.getNumberOfDetectors') - mock_n.return_value = 4 - with pytest.raises(ValueError): - d.rate_correction = [123,90,50] - -#----------------------------------------------------------------Readout clock -def test_get_readout_clock_0(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed') - m.return_value = 0 - assert d.readout_clock == 'Full Speed' - -def test_get_readout_clock_1(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed') - m.return_value = 1 - assert d.readout_clock == 'Half Speed' - -def test_get_readout_clock_2(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed') - m.return_value = 2 - assert d.readout_clock == 'Quarter Speed' - -def test_get_readout_clock_3(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed') - m.return_value = 3 - assert d.readout_clock == 'Super Slow Speed' - -def test_set_readout_clock_0(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed') - d.readout_clock = 'Full Speed' - m.assert_called_once_with(0) - -def test_set_readout_clock_1(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed') - d.readout_clock = 'Half Speed' - m.assert_called_once_with(1) - -def test_set_readout_clock_2(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed') - d.readout_clock = 'Quarter Speed' - m.assert_called_once_with(2) - -def test_set_readout_clock_3(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed') - d.readout_clock = 'Super Slow Speed' - m.assert_called_once_with(3) - -#----------------------------------------------------------------rx_zmqstream -def test_get_rx_zmqstream(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getRxDataStreamStatus') - m.return_value = False - assert d.rx_zmqstream == False - -def test_set_rx_zmqstream(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setRxDataStreamStatus') - d.rx_zmqstream = True - m.assert_called_once_with(True) - -def test_get_rx_zmqip(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter') - d.rx_zmqip - m.assert_called_once_with('rx_zmqip') - -def test_get_rx_zmqport_call(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter') - d.rx_zmqport - m.assert_called_once_with('rx_zmqport') - -def test_get_rx_zmqport_decode(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter') - m.return_value = '30001+30003+' - assert d.rx_zmqport == [30001, 30002, 30003, 30004] - -def test_get_rx_zmqport_empty(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter') - m.return_value = '' - assert d.rx_zmqport == [] - - -#--------------------------------------------------------------------status -def test_status_call(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getRunStatus') - d.status - m.assert_called_once_with() - -def test_start_acq_call(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.startAcquisition') - d.start_acq() - m.assert_called_once_with() - -def test_stop_acq_call(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.stopAcquisition') - d.stop_acq() - m.assert_called_once_with() - -#--------------------------------------------------------------------subexptime -def test_get_sub_exposure_time(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getSubExposureTime') - m.return_value = 2370000 - assert d.sub_exposure_time == 0.00237 - - -def test_set_sub_exposure_time(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setSubExposureTime') - d.sub_exposure_time = 0.002 - m.assert_called_once_with(2000000) - -def test_set_sub_exposure_time_raises_on_zero(d, mocker): - mocker.patch('_slsdet.DetectorApi.setSubExposureTime') - with pytest.raises(ValueError): - d.sub_exposure_time = 0 - -#------------------------------------------------------------------timing mode -def test_get_timing_mode(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getTimingMode') - d.timing_mode - m.assert_called_once_with() - -def test_set_timing_mode(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setTimingMode') - d.timing_mode = 'auto' - m.assert_called_once_with('auto') - -#----------------------------------------------------------------vthreshold -def test_get_vthreshold(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getDac') - d.vthreshold - m.assert_called_once_with('vthreshold', -1) - -def test_set_vthreshold(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setDac') - d.vthreshold = 1675 - m.assert_called_once_with('vthreshold', -1, 1675) - -#----------------------------------------------------------------trimbits -def test_get_trimbits(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.getAllTrimbits') - d.trimbits - m.assert_called_once_with() - -def test_set_trimbits(d, mocker): - m = mocker.patch('_slsdet.DetectorApi.setAllTrimbits') - d.trimbits = 15 - m.assert_called_once_with(15) - -def test_set_trimbits_raises_outside_range(d, mocker): - mocker.patch('_slsdet.DetectorApi.setAllTrimbits') - - with pytest.raises(ValueError): - d.trimbits = 69 - - with pytest.raises(ValueError): - d.trimbits = -5 - - diff --git a/python/tests/detector_test.py b/python/tests/detector_test.py deleted file mode 100755 index aa639ef3b..000000000 --- a/python/tests/detector_test.py +++ /dev/null @@ -1,489 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Testing the Detector python class by mocking calls. -Should only be used when there is functionality in -the detector.py file. - -An example is converting a mask to a list of set bits. -""" - -from unittest.mock import Mock -import pytest -from pytest_mock import mocker - -import sys -sys.path.append('/home/l_frojdh/slsdetectorgrup/sls_detector') - -import _slsdet -from sls_detector.errors import DetectorValueError, DetectorError -from sls_detector.utils import all_equal, element_if_equal - -@pytest.fixture -def d(): - from sls_detector import Detector - return Detector() - -def test_length(d, mocker): - m = mocker.patch('sls_detector.Detector.size') - m.return_value = 5 - assert(len(d) == 5) - -def test_counters_single(d, mocker): - m = mocker.patch('sls_detector.Detector.getCounterMask') - m.return_value = [7] - assert(d.counters == [0,1,2]) - -def test_counters_multi(d, mocker): - m = mocker.patch('sls_detector.Detector.getCounterMask') - m.return_value = [7, 9] - assert(d.counters == [[0,1,2],[0,3]]) - -def test_set_counters_single(d, mocker): - m = mocker.patch('sls_detector.Detector.setCounterMask') - d.counters = [0,2] - m.assert_called_once_with(5) - - - -# def test_busy_call(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getAcquiringFlag') -# m.return_value = False -# assert d.busy == False - -# def test_set_busy(d): -# d.busy = True -# assert d.busy == True -# assert d._api.getAcquiringFlag() == True -# d.busy = False -# assert d.busy == False -# assert d._api.getAcquiringFlag() == False - -# def test_error_mask(d): -# d._api.setErrorMask(1) -# assert d.error_mask == 1 -# d.clear_errors() - -# def test_error_handling(d): -# with pytest.raises(DetectorError): -# d._provoke_error() - -# def test_assign_to_detector_type(d): -# with pytest.raises(AttributeError): -# d.detector_type = 'Eiger' - -# def test_det_type(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getDetectorType') -# m.return_value = 'Eiger' -# assert d.detector_type == 'Eiger' - - -# def test_get_exposure_time(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getExposureTime') -# m.return_value = 100000000 -# assert d.exposure_time == 0.1 - -# def test_set_exposure_time(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setExposureTime') -# d.exposure_time = 1.5 -# m.assert_called_once_with(1500000000) - -# def test_set_exposure_time_less_than_zero(d, mocker): -# mocker.patch('_slsdet.DetectorApi.setExposureTime') -# with pytest.raises(DetectorValueError): -# d.exposure_time = -7 - - -# def test_get_file_index(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getFileIndex') -# m.return_value = 8 -# assert d.file_index == 8 - -# def test_set_file_index(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setFileIndex') -# d.file_index = 9 -# m.assert_called_with(9) - - -# def file_index_with_no_detector(d): -# assert d.file_index == -100 - -# def dr_with_no_detector(d): -# assert d.dynamic_range == -100 - -# def test_set_file_index_raises_on_neg(d, mocker): -# mocker.patch('_slsdet.DetectorApi.setFileIndex') -# with pytest.raises(ValueError): -# d.file_index = -9 - - -# def test_get_file_name(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getFileName') -# d.file_name -# m.assert_called_once_with() - -# def test_set_file_name(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setFileName') -# d.file_name = 'hej' -# m.assert_called_once_with('hej') - -# def test_get_file_path(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getFilePath') -# d.file_path -# m.assert_called_once_with() - -# def test_set_file_path_when_path_exists(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setFilePath') -# #To avoid raising an exception because path is not there -# mock_os = mocker.patch('os.path.exists') -# mock_os.return_value = True -# d.file_path = '/path/to/something/' -# m.assert_called_once_with('/path/to/something/') - -# def test_set_file_path_raises_when_not_exists(d, mocker): -# mocker.patch('_slsdet.DetectorApi.setFilePath') -# mock_os = mocker.patch('os.path.exists') -# mock_os.return_value = False -# with pytest.raises(FileNotFoundError): -# d.file_path = '/path/to/something/' - -# def test_get_file_write(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getFileWrite') -# m.return_value = False -# assert d.file_write == False - -# def test_set_file_write(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setFileWrite') -# d.file_write = True -# m.assert_called_once_with(True) - - -# def test_get_firmware_version(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getFirmwareVersion') -# m.return_value = 20 -# assert d.firmware_version == 20 - -# def test_cannot_set_fw_version(d): -# with pytest.raises(AttributeError): -# d.firmware_version = 20 - -# def test_get_high_voltage_call_signature(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getDac') -# d.high_voltage -# m.assert_called_once_with('highvoltage', -1) - -# def test_get_high_voltage(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getDac') -# m.return_value = 80 -# assert d.high_voltage == 80 - -# #self._api.setDac('highvoltage', -1, voltage) -# def test_set_high_voltage(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setDac') -# d.high_voltage = 80 -# m.assert_called_once_with('highvoltage', -1, 80) - -# def test_decode_hostname_two_names(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getHostname') -# m.return_value = 'beb059+beb048+' -# assert d.hostname == ['beb059', 'beb048'] - -# def test_decode_hostname_four_names(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getHostname') -# m.return_value = 'beb059+beb048+beb120+beb153+' -# assert d.hostname == ['beb059', 'beb048', 'beb120', 'beb153'] - -# def test_decode_hostname_blank(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getHostname') -# m.return_value = '' -# assert d.hostname == [] - -# def test_get_image_size_gives_correct_size(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getImageSize') -# m.return_value = (512,1024) -# im_size = d.image_size -# assert im_size.rows == 512 -# assert im_size.cols == 1024 - - - -# def test_load_config(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.readConfigurationFile') -# #To avoid raising an exception because path is not there -# mock_os = mocker.patch('os.path.isfile') -# mock_os.return_value = True -# d.load_config('/path/to/my/file.config') -# m.assert_called_once_with('/path/to/my/file.config') - -# def test_load_config_raises_when_file_is_not_found(d, mocker): -# mocker.patch('_slsdet.DetectorApi.readConfigurationFile') -# mock_os = mocker.patch('os.path.isfile') -# mock_os.return_value = False -# with pytest.raises(FileNotFoundError): -# d.load_config('/path/to/my/file.config') - -# def test_load_parameters(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.readParametersFile') -# #To avoid raising an exception because path is not there -# mock_os = mocker.patch('os.path.isfile') -# mock_os.return_value = True -# d.load_parameters('/path/to/my/file.par') -# m.assert_called_once_with('/path/to/my/file.par') - -# def test_load_parameters_raises_when_file_is_not_found(d, mocker): -# mocker.patch('_slsdet.DetectorApi.readParametersFile') -# mock_os = mocker.patch('os.path.isfile') -# mock_os.return_value = False -# with pytest.raises(FileNotFoundError): -# d.load_parameters('/path/to/my/file.par') - -# #getDetectorGeometry -# def test_get_module_geometry_gives_correct_size(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getDetectorGeometry') -# m.return_value = (13,7) -# g = d.module_geometry -# assert g.vertical == 7 -# assert g.horizontal == 13 - -# def test_get_module_geometry_access(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getDetectorGeometry') -# m.return_value = (12,3) -# assert d.module_geometry[0] == 12 -# assert d.module_geometry[1] == 3 -# assert d.module_geometry.vertical == 3 -# assert d.module_geometry.horizontal == 12 - -# def test_module_geometry_without_detectors(d): -# t = d.module_geometry -# assert t.horizontal == 0 -# assert t.vertical == 0 - -# def test_get_n_frames(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getNumberOfFrames') -# m.return_value = 3 -# assert d.n_frames == 3 - -# def test_set_n_frames(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setNumberOfFrames') -# d.n_frames = 9 -# m.assert_called_once_with(9) - -# def test_nframes_without_detector(d): -# assert d.n_frames == -100 - -# def test_set_n_frames_raises_on_neg(d, mocker): -# mocker.patch('_slsdet.DetectorApi.setNumberOfFrames') -# with pytest.raises(DetectorValueError): -# d.n_frames = -1 - -# def test_set_n_frames_raises_on_zero(d, mocker): -# mocker.patch('_slsdet.DetectorApi.setNumberOfFrames') -# with pytest.raises(DetectorValueError): -# d.n_frames = 0 - -# def test_n_cycles_without_detector(d): -# assert d.n_cycles == -100 - -# def test_set_n_cycles_raises_on_zero(d, mocker): -# mocker.patch('_slsdet.DetectorApi.setCycles') -# with pytest.raises(DetectorValueError): -# d.n_cycles = 0 - -# def test_set_n_cycles(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setCycles') -# d.n_cycles = 56 -# m.assert_called_once_with(56) - - - -# def test_n_measurements_without_detector(d): -# assert d.n_measurements == -100 - -# def test_set_n_measurements_raises_on_zero(d, mocker): -# mocker.patch('_slsdet.DetectorApi.setNumberOfMeasurements') -# with pytest.raises(DetectorValueError): -# d.n_measurements = 0 - -# def test_set_n_measurements(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setNumberOfMeasurements') -# d.n_measurements = 560 -# m.assert_called_once_with(560) - -# def test_get_n_modules_no_detector(d): -# assert d.n_modules == 0 - -# def test_get_n_modules(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getNumberOfDetectors') -# m.return_value = 12 -# assert d.n_modules == 12 - -# def test_get_period_time(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getPeriod') -# m.return_value = 130000000 -# assert d.period == 0.13 - -# def test_set_period_time(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setPeriod') -# d.period = 1.953 -# m.assert_called_once_with(1953000000) - -# def test_set_period_time_less_than_zero(d, mocker): -# mocker.patch('_slsdet.DetectorApi.setPeriod') -# with pytest.raises(ValueError): -# d.period = -7 - - -# def test_get_online(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getOnline') -# d.online -# m.assert_called_once_with() - -# def test_set_online(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setOnline') -# d.online = True -# m.assert_called_once_with(True) - -# def test_last_client_ip_no_detector(d): -# assert d.last_client_ip == '' - -# def test_last_cliten_ip_call(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getLastClientIP') -# d.last_client_ip -# m.assert_called_once_with() - -# #-------------------------------------------------------------Rate correction -# def test_get_rate_correction(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getRateCorrection') -# m.return_value = [132,129] -# assert d.rate_correction == [132,129] - -# def test_set_rate_correction(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setRateCorrection') -# mock_n = mocker.patch('_slsdet.DetectorApi.getNumberOfDetectors') -# mock_n.return_value = 3 -# d.rate_correction = [123,90,50] -# m.assert_called_once_with([123,90,50]) - -# def test_set_rate_correction_raises_on_wrong_number_of_values(d, mocker): -# mocker.patch('_slsdet.DetectorApi.setRateCorrection') -# mock_n = mocker.patch('_slsdet.DetectorApi.getNumberOfDetectors') -# mock_n.return_value = 4 -# with pytest.raises(ValueError): -# d.rate_correction = [123,90,50] - -# #----------------------------------------------------------------Readout clock -# def test_get_readout_clock_0(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed') -# m.return_value = 0 -# assert d.readout_clock == 'Full Speed' - -# def test_get_readout_clock_1(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed') -# m.return_value = 1 -# assert d.readout_clock == 'Half Speed' - -# def test_get_readout_clock_2(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed') -# m.return_value = 2 -# assert d.readout_clock == 'Quarter Speed' - -# def test_get_readout_clock_3(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed') -# m.return_value = 3 -# assert d.readout_clock == 'Super Slow Speed' - -# def test_set_readout_clock_0(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed') -# d.readout_clock = 'Full Speed' -# m.assert_called_once_with(0) - -# def test_set_readout_clock_1(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed') -# d.readout_clock = 'Half Speed' -# m.assert_called_once_with(1) - -# def test_set_readout_clock_2(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed') -# d.readout_clock = 'Quarter Speed' -# m.assert_called_once_with(2) - -# def test_set_readout_clock_3(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed') -# d.readout_clock = 'Super Slow Speed' -# m.assert_called_once_with(3) - -# #----------------------------------------------------------------rx_zmqstream -# def test_get_rx_zmqstream(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getRxDataStreamStatus') -# m.return_value = False -# assert d.rx_zmqstream == False - -# def test_set_rx_zmqstream(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setRxDataStreamStatus') -# d.rx_zmqstream = True -# m.assert_called_once_with(True) - -# def test_get_rx_zmqip(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter') -# d.rx_zmqip -# m.assert_called_once_with('rx_zmqip') - -# def test_get_rx_zmqport_call(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter') -# d.rx_zmqport -# m.assert_called_once_with('rx_zmqport') - -# def test_get_rx_zmqport_decode(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter') -# m.return_value = ['30001', '30003'] -# assert d.rx_zmqport == [30001, 30003] - -# def test_get_rx_zmqport_empty(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter') -# m.return_value = '' -# assert d.rx_zmqport == [] - - -# #--------------------------------------------------------------------status -# def test_status_call(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getRunStatus') -# d.status -# m.assert_called_once_with() - -# def test_start_detecor(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.startAcquisition') -# d.start_detector() -# m.assert_called_once_with() - -# def test_stop_acq_call(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.stopAcquisition') -# d.stop_detector() -# m.assert_called_once_with() - - - -# #------------------------------------------------------------------timing mode -# def test_get_timing_mode(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getTimingMode') -# d.timing_mode -# m.assert_called_once_with() - -# def test_set_timing_mode(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setTimingMode') -# d.timing_mode = 'auto' -# m.assert_called_once_with('auto') - -# #----------------------------------------------------------------vthreshold -# def test_get_vthreshold(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.getDac') -# d.vthreshold -# m.assert_called_once_with('vthreshold', -1) - -# def test_set_vthreshold(d, mocker): -# m = mocker.patch('_slsdet.DetectorApi.setDac') -# d.vthreshold = 1675 -# m.assert_called_once_with('vthreshold', -1, 1675) - - - - diff --git a/python/tests/test_detector_property.py b/python/tests/test_detector_property.py deleted file mode 100755 index c647c4efc..000000000 --- a/python/tests/test_detector_property.py +++ /dev/null @@ -1,76 +0,0 @@ -import pytest -from sls_detector.detector_property import DetectorProperty - -class Holder: - """ - This class does nothing except hold values - for testing of the DetectorProperty class - """ - def __init__(self, N): - self.values = [i for i in range(N)] - def get(self, i): - return self.values[i] - def set(self, i,v): - self.values[i] = v - def nmod(self): - return len(self.values) - -@pytest.fixture -def p(): - h = Holder(5) - return DetectorProperty(h.get, h.set, h.nmod, 'prop') - -def test_initialization(): - def getf(i): - return 5 - def setf(): - return - def nmod(): - return 3 - name = 'a property' - p = DetectorProperty(getf, setf, nmod, name) - assert p.get == getf - assert p.set == setf - assert p.get_nmod == nmod - assert p.__name__ == name - -def test_get_single_value(p): - assert p[2] == 2 - -def test_get_all_values(p): - assert p[:] == [0, 1, 2, 3, 4] - -def test_get_values_by_iterable(p): - vals = p[1,3] - assert vals == [1,3] - -def test_set_single_value(p): - p[2] = 7 - assert p[:] == [0,1,7,3,4] - -def test_set_all(p): - p[:] = 10 - assert p[:] == [10,10,10,10,10] - -def test_set_all_by_list(p): - p[:] = [7,8,9,10,11] - assert p[:] == [7,8,9,10,11] - -def test_set_all_bool(p): - p[:] = True - assert p[:] == [True]*5 - -def test_set_by_iter(p): - keys = [2,4] - vals = [18,23] - p[keys] = vals - assert p[:] == [0,1,18,3,23] - -def test_set_by_iter_single_val(p): - keys = [2,4] - val = 9 - p[keys] = val - assert p[:] == [0,1,9,3,9] - -def test_print_values(p): - assert repr(p) == 'prop: [0, 1, 2, 3, 4]'