def _isSlewingDisabled_BOSS_APOGEE(self, bossState, apogeeState, expect=None, index=0): """Tests isSlewingDisabled for BOSS and APOGEE.""" self.cmdState.cmd = self.cmd self.cmdState.index = index if expect is None: expect = ('slewing disallowed for APOGEE&MaNGA, ', 'BOSS_exposureState={0}'.format(bossState.upper()), 'APOGEE_exposureState={0}'.format( apogeeState.capitalize())) sopTester.updateModel('boss', TestHelper.bossState[bossState]) sopTester.updateModel('apogee', TestHelper.apogeeState[apogeeState]) result = self.cmdState.isSlewingDisabled() if result is False: self.assertFalse(result) else: if isinstance(expect, str): expect = [expect] for expectItem in expect: self.assertIsInstance(expectItem, str) self.assertIn(expectItem, result) return result
def test_goto_field_boss_flat_on_fails(self): """Fail on ff.on, but still readout the arc.""" sopTester.updateModel('mcp',TestHelper.mcpState['all_off']) cmdState = self.actorState.gotoField cmdState.reinitialize(self.cmd) self.cmd.failOn = "mcp ff.on" self._goto_field_boss(16,68,0,1,cmdState,didFail=True,finish=True)
def test_goto_field_boss_ffs_open_fails(self): """Fail on ffs.open, but still readout flat.""" sopTester.updateModel('mcp',TestHelper.mcpState['all_off']) cmdState = self.actorState.gotoField cmdState.reinitialize(self.cmd) self.cmd.failOn = "mcp ffs.open" self._goto_field_boss(21,98,1,1,cmdState,didFail=True,finish=True)
def test_goto_field_boss_ne_on_fails(self): """Fail on ne.on.""" sopTester.updateModel('mcp',TestHelper.mcpState['all_off']) cmdState = self.actorState.gotoField cmdState.reinitialize(self.cmd) self.cmd.failOn = "mcp ne.on" self._goto_field_boss(6,15,0,1,cmdState,didFail=True,finish=True)
def _do_shutter(self, position): """Test commanding the shutter open/closed.""" sopTester.updateModel('apogee', TestHelper.apogeeState['unknown']) cmdVar = apogeeThread.do_shutter(self.cmd, myGlobals.actorState, position) self._check_cmd(1, 0, 0, 0, finish=False) self.assertFalse(cmdVar.didFail)
def test_goto_gang_change_apogee_fails_domeflat(self): """Tests shutter open, FFS close, expose -> fail.""" myGlobals.actorState.survey = sopActor.APOGEE self.cmd.failOn = "apogee expose time=50.0 object=DomeFlat" sopTester.updateModel('apogee', TestHelper.apogeeState['B_open']) sopTester.updateModel('mcp', TestHelper.mcpState['apogee_science']) self._goto_gang_change(2, 14, 0, 1, didFail=True)
def test_apogee_dome_flat_gang_on_podium_fails(self): """Tests fail immediately.""" name = 'apogeeDomeFlat' sopTester.updateModel('mcp', TestHelper.mcpState['all_off']) multiCmd = MultiCommand(self.cmd, myGlobals.actorState.timeout + 50, name) self._apogee_dome_flat(0, 5, 0, 0, multiCmd, finish=True, didFail=True)
def test_goto_gang_change_apogee_fails_slew(self): """Tests failed slew.""" self.cmd.failOn = "tcc axis init" myGlobals.actorState.survey = sopActor.APOGEE sopTester.updateModel('apogee', TestHelper.apogeeState['B_open']) sopTester.updateModel('mcp', TestHelper.mcpState['apogee_science']) self._goto_gang_change(5, 21, 0, 2, didFail=True)
def test_apogee_dome_flat_enclosure(self): """Tests shutter open, exposure +(ff on, ff off).""" name = 'apogeeDomeFlat' sopTester.updateModel('mcp', TestHelper.mcpState['apogee_parked']) multiCmd = MultiCommand(self.cmd, myGlobals.actorState.timeout + 50, name) self._apogee_dome_flat(3, 11, 0, 0, multiCmd)
def test_do_apogeemanga_dither_fails_long_exposure(self): sopTester.updateModel('mcp', TestHelper.mcpState['apogee_science']) sopTester.updateModel('apogee', TestHelper.apogeeState['B_open']) self.cmd.failOn = 'boss exposure science itime=900' self.cmd.failOnCount = 2 mangaDither = 'C' self._do_apogeemanga_dither(7, 28, 0, 1, mangaDither, didFail=True, apogee_long=True, surveyMode='APOGEE lead')
def test_isSlewingDisabled_because_exposing(self): sopTester.updateModel('boss', TestHelper.bossState['integrating']) self.cmdState.nExp = 3 self.cmdState.index = 2 self._isSlewingDisabled_because_exposing('BOSS', 1, 'INTEGRATING', prefix='BOSS_')
def test_isSlewingDisabled_because_alive_BOSS_integrating(self): self.cmdState.cmd = self.cmd sopTester.updateModel('boss', TestHelper.bossState['integrating']) result = self.cmdState.isSlewingDisabled() self.assertIsInstance(result, str) expect = ('slewing disallowed for APOGEE&MaNGA, ' 'with a sequence in progress') self.assertIn(expect, result)
def test_deactivate_guider_decenter_fails(self): """ decenter off Will give cmd.error and stage=failed, but won't fail command. """ sopTester.updateModel('guider',TestHelper.guiderState['guiderOnDecenter']) self.cmd.failOn="guider decenter off" self._deactivate_guider_decenter(1,9,0,2,didFail=True)
def test_gotoField_noScreen(self): sopTester.updateModel('guider', TestHelper.guiderState['apogeeLoaded']) sopTester.updateModel('platedb', TestHelper.platedbState['apogee']) stages = ['slew', 'cleanup'] expect = {'ra': 20, 'dec': 30, 'moveScreen': False} self._gotoField(1, expect, stages, 'noScreen')
def test_goto_field_apogee_no_slew_shutter_open(self): """ shutter close, FF on, guider flat, FF off, open FFS 3xguider axes off, guider on """ sopTester.updateModel('apogee',TestHelper.apogeeState['B_open']) cmdState = self.actorState.gotoField cmdState.reinitialize(self.cmd) cmdState.doSlew = False self._goto_feld_apogee(9,34,0,0,cmdState)
def test_gotoField_apogee_default(self): sopTester.updateModel('guider', TestHelper.guiderState['apogeeLoaded']) sopTester.updateModel('platedb', TestHelper.platedbState['apogee']) stages = ['slew', 'cleanup'] expect = {'ra': 20, 'dec': 30} self._gotoField(1, expect, stages, '')
def test_goto_gang_change_apogee_noDomeFlat(self): """Tests B open, no dome flat.""" myGlobals.actorState.survey = sopActor.APOGEE sopTester.updateModel('mcp', TestHelper.mcpState['apogee_science']) sopTester.updateModel('apogee', TestHelper.apogeeState['B_open']) cmdState = self.actorState.gotoGangChange cmdState.reinitialize(self.cmd) cmdState.doDomeFlat = False slewThread.goto_gang_change(self.cmd, cmdState, myGlobals.actorState) self._check_cmd(5, 11, 0, 0, True)
def _do_dither(self, dither): """Test moving the dither position.""" sopTester.updateModel('apogee', TestHelper.apogeeState['unknown']) cmdVar = apogeeThread.do_dither(self.cmd, myGlobals.actorState, dither) self._check_cmd(1, 0, 0, 0, finish=False) self.assertEquals( dither, myGlobals.actorState.models['apogee'].keyVarDict['ditherPosition'] [1]) self.assertFalse(cmdVar.didFail)
def test_goto_field_apogee_no_slew_decenter_off(self): """ FF on, guider flat, FF off, open FFS guider decenter off, 3xguider axes off, guider on """ sopTester.updateModel('mcp',TestHelper.mcpState['all_off']) sopTester.updateModel('guider',TestHelper.guiderState['guiderOnDecenter']) cmdState = self.actorState.gotoField cmdState.reinitialize(self.cmd) cmdState.doSlew = False self._goto_feld_apogee(9,35,0,0,cmdState)
def test_goto_gang_change_apogee_bypass_gangToPodium(self): """Tests bypass gangToPodium. Testing for complaints from the observers about gang bypass and gang changes. """ self._prep_bypass('gangToPodium', clear=True) myGlobals.actorState.survey = sopActor.APOGEE sopTester.updateModel('mcp', TestHelper.mcpState['apogee_science']) sopTester.updateModel('apogee', TestHelper.apogeeState['B_open']) self._goto_gang_change(4, 14, 3, 0)
def test_goto_field_boss_calibs(self): """ see cmd_calls/TestGotoField.txt for command list. """ sopTester.updateModel('mcp',TestHelper.mcpState['all_off']) cmdState = self.actorState.gotoField cmdState.reinitialize(self.cmd) cmdState.doSlew = False cmdState.doHartmann = False cmdState.doGuider = False self._goto_field_boss(10,55,0,0,cmdState)
def test_goto_field_boss_hartmann_fails(self): """Fail on hartmann.""" sopTester.updateModel('mcp',TestHelper.mcpState['all_off']) cmdState = self.actorState.gotoField cmdState.reinitialize(self.cmd) self.cmd.failOn = "hartmann collimate" # TBD: NOTE: Something wrong with this test! # Should produce 0 errors, but the failure usually (not always!) # cascades through to hgcd lampThread. # I'm pretty sure that's not correct. self._goto_field_boss(9,33,0,1,cmdState,didFail=True,finish=True)
def test_goto_field_boss_slew(self): """ axis status, axis init, slew """ sopTester.updateModel('mcp',TestHelper.mcpState['all_off']) cmdState = self.actorState.gotoField cmdState.reinitialize(self.cmd) cmdState.doGuider = False cmdState.doHartmann = False cmdState.doCalibs = False cmdState.arcTime = 0 cmdState.flatTime = 0 self._goto_field_boss(3,25,0,0,cmdState)
def test_goto_field_boss_hartmann(self): """ ne on, hgcd on, ff off, doHartmann, ne off, hgcd off """ sopTester.updateModel('mcp',TestHelper.mcpState['all_off']) cmdState = self.actorState.gotoField cmdState.reinitialize(self.cmd) cmdState.doSlew = False cmdState.doCalibs = False cmdState.arcTime = 0 cmdState.flatTime = 0 cmdState.doGuider = False self._goto_field_boss(5,28,0,0,cmdState)
def test_do_manga_dither_after_sequence(self): """See ticket #2107 for the bug that this tickles.""" sopTester.updateModel('mcp', TestHelper.mcpState['boss_science']) dither = 'N' cmdState = self.actorState.doMangaSequence cmdState.reinitialize(self.cmd) cmdState.count = 1 cmdState.dithers = 'NSE' cmdState.reset_ditherSeq() self.cmd.verbose = False masterThread.do_apogeemanga_sequence(self.cmd, cmdState, myGlobals.actorState) self.cmd.reset() self.cmd.verbose = self.verbose self._do_manga_dither(4, 27, 0, 0, dither=dither)
def _goto_gang_change(self, nCall, nInfo, nWarn, nErr, finish=True, didFail=False): """Helper functions for the gotoGangChange tests.""" sopTester.updateModel('tcc', TestHelper.tccState['tracking']) cmdState = self.actorState.gotoGangChange cmdState.reinitialize(self.cmd) slewThread.goto_gang_change(self.cmd, cmdState, myGlobals.actorState) self._check_cmd(nCall, nInfo, nWarn, nErr, finish, didFail)
def test_apogee_dome_flat_shuter_close_fails(self): """Tests shutter open, ffs close -> fail.""" name = 'apogeeDomeFlat' self.cmd.failOn = "apogee shutter close" sopTester.updateModel('mcp', TestHelper.mcpState['apogee_science']) multiCmd = MultiCommand(self.cmd, myGlobals.actorState.timeout + 50, name) self._apogee_dome_flat(4, 15, 0, 1, multiCmd, finish=True, didFail=True)
def test_goto_field_cartridge_mismatch(self): """Tests gotoField if there is a mismatch between MCP and guider.""" sopTester.updateModel('guider', TestHelper.guiderState['bossLoaded']) mcpState = TestHelper.mcpState['boss_science'] mcpState.update({'instrumentNum': [15]}) sopTester.updateModel('mcp', mcpState) cmdState = self.actorState.gotoField cmdState.reinitialize(self.cmd) masterThread.goto_field(self.cmd, cmdState, myGlobals.actorState) self._check_cmd(0, 13, 0, 0, finish=True, didFail=True)
def test_goto_field_boss_guider(self): """ Start with decentered guiding on, to check that we clear it. ff on, guider flat, ff off, ffs open 3xguider axes off, decenter off, guider on """ sopTester.updateModel('mcp',TestHelper.mcpState['all_off']) sopTester.updateModel('guider',TestHelper.guiderState['guiderOnDecenter']) cmdState = self.actorState.gotoField cmdState.reinitialize(self.cmd) cmdState.doSlew = False cmdState.doHartmann = False cmdState.doCalibs = False cmdState.arcTime = 0 cmdState.flatTime = 0 self._goto_field_boss(9,35,0,0,cmdState)
def test_do_apogee_science_1000s_after_500s_cart7(self): """Tests if expTime is set to 1000s after a normal length exposure.""" sopTester.updateModel('platedb', TestHelper.platedbState['apogeeLeadCart7']) self._update_cart(7, 'APOGEE') cmdState = self.actorState.doApogeeScience cmdState.reinitialize(self.cmd) self.assertEqual(cmdState.expTime, 500) self.assertEqual(cmdState.keywords['expTime'], 500) sopTester.updateModel('platedb', TestHelper.platedbState['apogeeLead1000sCart7']) self._update_cart(7, 'APOGEE') cmdState = self.actorState.doApogeeScience cmdState.reinitialize(self.cmd) self.assertEqual(cmdState.expTime, 1000) self.assertEqual(cmdState.keywords['expTime'], 1000)