def test_live_set_touchscreen(self):
        ca_url = os.environ['EPI_URL']
        epi = Epipearl(
                ca_url, os.environ['EPI_USER'], os.environ['EPI_PASSWD'])

        response = WebUiConfig.set_touchscreen(
                client=epi,
                screen_timeout=453)

        assert response is True
    def test_set_source_deinterlacing_ok(self):
        resp_data = resp_datafile('set_source_deinterlacing', 'ok')
        httpretty.register_uri(
                httpretty.POST,
                '%s/admin/sources/D12345678.hdmi-a' % epiphan_url,
                body=resp_data,
                status=200)

        response = WebUiConfig.set_source_deinterlacing(
                client=self.c, source_name='D12345678.hdmi-a')
        assert response
    def test_set_ntp_ok(self):
        resp_data = resp_datafile('set_date_and_time', 'ok')
        httpretty.register_uri(
                httpretty.POST,
                '%s/admin/timesynccfg' % epiphan_url,
                body=resp_data)

        response = WebUiConfig.set_ntp(
                client=self.c,
                server='north-america.pool.ntp.org',
                timezone='US/Alaska')
        assert response is True
    def test_set_ntp_proto_didnot_take(self):
        resp_data = resp_datafile('set_date_and_time', 'proto_didnot_take')
        httpretty.register_uri(
                httpretty.POST,
                '%s/admin/timesynccfg' % epiphan_url,
                body=resp_data)

        with pytest.raises(SettingConfigError) as e:
            response = WebUiConfig.set_ntp(
                    client=self.c,
                    server='north-america.pool.ntp.org',
                    timezone='US/Alaska')
        assert 'protocol setting expected(NTP)' in e.value.message
    def test_set_ntp_invalid_tz(self):
        resp_data = resp_datafile('set_date_and_time', 'invalid_tz')
        httpretty.register_uri(
                httpretty.POST,
                '%s/admin/timesynccfg' % epiphan_url,
                body=resp_data)

        with pytest.raises(SettingConfigError) as e:
            response = WebUiConfig.set_ntp(
                    client=self.c,
                    server='north-america.pool.ntp.org',
                    timezone='Kawabonga')
        assert 'Unsupported time zone' in e.value.message
    def test_set_source_deinterlacing_didnot_take(self):
        resp_data = resp_datafile('set_source_deinterlacing', 'ok')
        httpretty.register_uri(
                httpretty.POST,
                '%s/admin/sources/D12345678.hdmi-a' % epiphan_url,
                body=resp_data,
                status=200)

        with pytest.raises(SettingConfigError) as e:
            response = WebUiConfig.set_source_deinterlacing(
                    client=self.c, source_name='D12345678.hdmi-a',
                    enabled=False)
        assert 'deinterlacing expected to be OFF' in e.value.message
示例#7
0
    def set_recorder_channels(cls, client, recorder_id, channel_list):
        """returns true or raise exception."""

        # note in this case, checks won't catch channels that are _not_
        # supposed to be configured, if the ones that are supposed to be
        # configured are correct.
        check_success = []
        for i in channel_list:
            check_success.append({
                'emsg': 'channel(%s) missing for recorder(%s) config' %
                        (i, recorder_id),
                'func': WebUiConfig.check_multivalue_select(
                    name='rc[]', value=i)})

        channel_list_param = [('rc[]', x) for x in channel_list]
        params = [('pfd_form_id', 'recorder_channels')] + channel_list_param
        path = '/admin/recorder%s/archive' % recorder_id

        return WebUiConfig.configuration(
                client=client,
                params=params,
                path=path,
                check_success=check_success)
示例#8
0
    def set_channel_rtmp(
            cls, client, channel_id,
            rtmp_url, rtmp_stream, rtmp_usr, rtmp_pwd):
        """returns true or raises exception."""

        params = {
                'rtmp_url': rtmp_url,
                'rtmp_stream': rtmp_stream,
                'rtmp_username': rtmp_usr,
                'rtmp_password': rtmp_pwd}

        path = '/admin/channel%s/streamsetup' % channel_id

        check_success = [
                {
                    'emsg': 'rtmp_usr expected(%s)' % rtmp_usr,
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='rtmp_username', value=rtmp_usr)},
                {
                    'emsg': 'rtmp_url expected(%s)' % rtmp_url,
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='rtmp_url', value=rtmp_url)},
                {
                    'emsg': 'rtmp_stream expected(%s)' % rtmp_stream,
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='rtmp_stream', value=rtmp_stream)},
                {
                    'emsg': 'not the rtmp_pwd expected',
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='rtmp_password', value=rtmp_pwd)}]

        return WebUiConfig.configuration(
                client=client,
                params=params,
                path=path,
                check_success=check_success)
示例#9
0
    def delete_channel(cls, client, channel_id):
        """returns true or raises exception.

        param: channel_id: number id of channel to be deleted
            note that this returns success if the channel was inexistent.
        """

        def check_success_message(tag):
            return 'successfully deleted' in tag.text

        # best guess if channel_id refers to a recorder
        recorder_id = None
        try:
            if channel_id.startswith('m'):
                r = channel_id.split('m')
                recorder_id = r[1]
        except IndexError:
            # will not guess and use channel_id as is
            pass

        params = {
                'deleteid': channel_id,
                'deletemode': 'trash'}

        path = '/admin/channel%s/status' % channel_id
        if recorder_id:
            path = '/admin/recorder%s/archive' % recorder_id

        check_success = [
                {
                    'emsg': 'successful deletion message not found',
                    'func': check_success_message}]

        return WebUiConfig.configuration(
                client=client,
                params=params,
                path=path,
                check_success=check_success)
示例#10
0
    def set_recorder_settings(
            cls, client,
            recorder_id,  # number id (without usual prefix 'm')
            recording_timelimit_in_minutes=360,      # 6h
            recording_sizelimit_in_kbytes=64000000,  # 64G
            output_format='avi',  # or mov, mp4, ts(mpeg-ts)
            user_prefix='',       # prefix for recording file
            afu_enabled='on',     # this means auto-upload disabled!
            upnp_enabled=''):

        #
        # 06jun16 naomi: upnp and afu(automatic file upload) have dependencies
        # that are not treated by this api call (these features must be
        # enabled for the device and configured in 'automatic file upload' and
        # 'UPnP' webui calls)
        # -- to be implemented in epipearl.endpoints.webui_config.
        #

        timelimit = '%d:%02d:00' % (
                recording_timelimit_in_minutes / 60,
                recording_timelimit_in_minutes % 60)

        check_success = [
                {
                    'emsg': 'timelimit expected(%s)' % timelimit,
                    'func': WebUiConfig.check_singlevalue_select(
                        value=timelimit)},
                {
                    'emsg': 'sizelimit expected(%s)' %
                            recording_sizelimit_in_kbytes,
                    'func': WebUiConfig.check_singlevalue_select(
                        value=str(recording_sizelimit_in_kbytes))},
                {
                    'emsg': 'output_format expected(%s)' % output_format,
                    'func': WebUiConfig.check_singlevalue_select(
                        value=output_format)},
                {
                    'emsg': 'user_prefix expected(%s)' % user_prefix,
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='user_prefix', value=user_prefix)}]
        if afu_enabled == 'on':
            check_success.append(
                {
                    'emsg': 'auto file upload expected(OFF)',
                    'func': WebUiConfig.check_singlevalue_checkbox_disabled(
                                tag_id='afu_enabled')})
        else:
            check_success.append(
                {
                    'emsg': 'auto file upload expected(ON)',
                    'func': WebUiConfig.check_singlevalue_checkbox(
                                tag_id='afu_enabled')})
        if upnp_enabled == 'on':
            check_success.append(
                {
                    'emsg': 'share via UPnP expected(ON)',
                    'func': WebUiConfig.check_singlevalue_checkbox(
                                tag_id='upnp_enabled')})
        else:
            check_success.append(
                {
                    'emsg': 'share via UPnP expected(OFF)',
                    'func': WebUiConfig.check_singlevalue_checkbox_disabled(
                                tag_id='upnp_enabled')})
        params = {
                'pfd_form_id': 'rec_settings',
                'timelimit': timelimit,
                'sizelimit': recording_sizelimit_in_kbytes,
                'output_format': output_format,
                'user_prefix': user_prefix,
                'afu_enabled': afu_enabled,
                'upnp_enabled': upnp_enabled}
        path = '/admin/recorder%s/archive' % recorder_id


        assert upnp_enabled == ''

        return WebUiConfig.configuration(
                client=client,
                params=params,
                path=path,
                check_success=check_success)
示例#11
0
    def set_mhpearl_settings(
            cls, client,
            device_name='',       # device name for mh admin
            device_channel='',    # vod recorder id number
            file_search_range_in_seconds='',    # range within which it must
                                                # locate a recording
            admin_server_url='',  # mh admin url
            admin_server_usr='',  # mh digest user
            admin_server_pwd='',  # mh digest pwd
            update_frequency_in_seconds='120',  # freq to poll for schedule
            backup_agent=False):    # if True, does not upload recording to
                                    # mh when done

        check_success = [
                {
                    'emsg': 'device_name expected(%s)' % device_name,
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='ca_name', value=device_name)},
                {
                    'emsg': 'device_username expected(%s)' % client.user,
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='ca_user', value=client.user)},
                {
                    'emsg': 'not the device_password expected',
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='ca_pass', value=client.passwd)},
                {
                    'emsg': 'device_channel expected(%s)' % device_channel,
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='ca_chan', value=device_channel)},
                {
                    'emsg': 'file_search_range expected(%s)' %
                            file_search_range_in_seconds,
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='ca_range',
                        value=str(file_search_range_in_seconds))},
                {
                    'emsg': 'admin_server_url expected(%s)' % admin_server_url,
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='mh_host', value=admin_server_url)},
                {
                    'emsg': 'admin_server_user expected(%s)' %
                            admin_server_usr,
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='mh_user', value=admin_server_usr)},
                {
                    'emsg': 'not the admin_server_passwd expected',
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='mh_pass', value=admin_server_pwd)},
                {
                    'emsg': 'update_frequency expected(%s)' %
                            update_frequency_in_seconds,
                    'func': WebUiConfig.check_input_id_value(
                        tag_id='mh_freq',
                        value=str(update_frequency_in_seconds))}]

        params = {
                'DEVICE_NAME': device_name,
                'DEVICE_USERNAME': client.user,
                'DEVICE_PASSWORD': client.passwd,
                'DEVICE_CHANNEL': device_channel,
                'FILE_SEARCH_RANGE': file_search_range_in_seconds,
                'ADMIN_SERVER_URL': admin_server_url,
                'ADMIN_SERVER_USER': admin_server_usr,
                'ADMIN_SERVER_PASSWD': admin_server_pwd,
                'UPDATE_FREQUENCY': update_frequency_in_seconds}

        if backup_agent:
            params['BACKUP_AGENT'] = 'on'
            check_success.append({
                'emsg': 'backup_agent expected("ON")',
                'func': WebUiConfig.check_singlevalue_checkbox(
                    tag_id='mh_backup')})
        else:
            check_success.append({
                'emsg': 'backup_agent expected("ON")',
                'func': WebUiConfig.
                        check_singlevalue_checkbox_disabled(
                            tag_id='mh_backup')})

        path = '/admin/mhcfg'
        return WebUiConfig.configuration(
                client=client,
                params=params,
                path=path,
                check_success=check_success)