def testStartupPeriodicInformInterval(self):
     ms.PERIODIC_CALLBACK = MockPeriodicCallback
     cpe_ms = ms.CpeManagementServer(acs_config=FakeAcsConfig(),
                                     port=0,
                                     ping_path='/')
     for _ in range(5):
         self.assertEqual(60, cpe_ms.PeriodicInformInterval)
         cpe_ms.SuccessfulSession()
     self.assertEqual(15 * 60, cpe_ms.PeriodicInformInterval)
     cpe_ms = ms.CpeManagementServer(acs_config=FakeAcsConfig(),
                                     port=0,
                                     ping_path='/')
     self.assertEqual(60, cpe_ms.PeriodicInformInterval)
     cpe_ms.SuccessfulSession()
     cpe_ms.PeriodicInformInterval = 900
     self.assertEqual(900, cpe_ms.PeriodicInformInterval)
예제 #2
0
파일: http.py 프로젝트: prahlad574/my
 def __init__(self, ip, cpe, listenport, platform_config, ping_path,
              acs_url=None, ping_ip6dev=None, fetch_args=dict(), ioloop=None,
              restrict_acs_hosts=None):
   self.cpe = cpe
   self.cpe_soap = api_soap.CPE(self.cpe)
   self.encode = api_soap.Encode()
   self.outstanding = None
   self.response_queue = []
   self.request_queue = []
   self.event_queue = LimitDeque(MAX_EVENT_QUEUE_SIZE, self.EventQueueHandler)
   self.ioloop = ioloop or tornado.ioloop.IOLoop.instance()
   self.retry_count = 0  # for Inform.RetryCount
   self.start_session_timeout = None  # timer for CWMPRetryInterval
   self.session = None
   self.my_configured_ip = ip
   self.ping_ip6dev = ping_ip6dev
   self.fetch_args = fetch_args
   self.rate_limit_seconds = 60
   self.platform_config = platform_config
   self.previous_ping_time = 0
   self.ping_timeout_pending = None
   self._changed_parameters = set()
   self._changed_parameters_sent = set()
   self.cpe_management_server = cpe_management_server.CpeManagementServer(
       acs_url=acs_url, platform_config=platform_config, port=listenport,
       ping_path=ping_path, get_parameter_key=cpe.getParameterKey,
       start_periodic_session=self.NewPeriodicSession, ioloop=self.ioloop,
       restrict_acs_hosts=restrict_acs_hosts)
    def testTransaction(self):
        cpe_ms = ms.CpeManagementServer(platform_config=None,
                                        port=5,
                                        ping_path='/',
                                        restrict_acs_hosts='.gfsvc.com')
        orig = copy.deepcopy(cpe_ms.config)
        # sanity
        self.assertEqual(orig.CWMPRetryMinimumWaitInterval,
                         cpe_ms.CWMPRetryMinimumWaitInterval)
        cpe_ms.StartTransaction()
        cpe_ms.AbandonTransaction()
        self.assertEqual(orig.CWMPRetryMinimumWaitInterval,
                         cpe_ms.CWMPRetryMinimumWaitInterval)

        cpe_ms.StartTransaction()
        cpe_ms.CommitTransaction()
        self.assertEqual(orig.CWMPRetryMinimumWaitInterval,
                         cpe_ms.CWMPRetryMinimumWaitInterval)

        cpe_ms.StartTransaction()
        cpe_ms.CWMPRetryMinimumWaitInterval *= 2
        cpe_ms.AbandonTransaction()
        self.assertEqual(orig.CWMPRetryMinimumWaitInterval,
                         cpe_ms.CWMPRetryMinimumWaitInterval)

        cpe_ms.StartTransaction()
        cpe_ms.CWMPRetryMinimumWaitInterval *= 2
        cpe_ms.CommitTransaction()
        self.assertEqual(orig.CWMPRetryMinimumWaitInterval * 2,
                         cpe_ms.CWMPRetryMinimumWaitInterval)
 def testGetSessionTimeout(self):
     cpe_ms = ms.CpeManagementServer(acs_config=FakeAcsConfig(),
                                     port=0,
                                     ping_path='/')
     self.assertEqual(cpe_ms.GetTimeout('/no_such_file_at_this_path'), 60)
     self.assertEqual(
         cpe_ms.GetTimeout('testdata/cpe_management_server/garbage'), 60)
     self.assertEqual(
         cpe_ms.GetTimeout('testdata/cpe_management_server/timeout'), 120)
 def testIsIp6Address(self):
     cpe_ms = ms.CpeManagementServer(platform_config=FakePlatformConfig(),
                                     port=5,
                                     ping_path='/ping/path')
     self.assertTrue(cpe_ms._isIp6Address('fe80::21d:9ff:fe11:f55f'))
     self.assertTrue(
         cpe_ms._isIp6Address('2620:0:1000:5200:222:3ff:fe44:5555'))
     self.assertFalse(cpe_ms._isIp6Address('1.2.3.4'))
     self.assertFalse(cpe_ms._isIp6Address('foobar'))
 def testConnectionRequestURL(self):
     cpe_ms = ms.CpeManagementServer(platform_config=FakePlatformConfig(),
                                     port=5,
                                     ping_path='/ping/path')
     cpe_ms.my_ip = '1.2.3.4'
     self.assertEqual(cpe_ms.ConnectionRequestURL,
                      'http://1.2.3.4:5/ping/path')
     cpe_ms.my_ip = '2620:0:1000:5200:222:3ff:fe44:5555'
     self.assertEqual(
         cpe_ms.ConnectionRequestURL,
         'http://[2620:0:1000:5200:222:3ff:fe44:5555]:5/ping/path')
    def testValidateServer(self):
        def TryUrl(cpe, value):
            valid = True
            try:
                cpe_ms.ValidateAcsUrl(value)
            except ValueError:
                valid = False
            return valid

        cpe_ms = ms.CpeManagementServer(
            platform_config=FakePlatformConfig(),
            port=5,
            ping_path='/',
            restrict_acs_hosts='google.com .gfsvc.com foo.com')
        self.assertTrue(TryUrl(cpe_ms, 'https://bugger.gfsvc.com'))
        self.assertTrue(TryUrl(cpe_ms, 'https://acs.prod.gfsvc.com'))
        self.assertTrue(TryUrl(cpe_ms, 'https://acs.prod.google.com'))
        self.assertTrue(TryUrl(cpe_ms, 'https://google.com'))
        self.assertFalse(TryUrl(cpe_ms, 'https://imposter.evilgfsvc.com'))
        self.assertFalse(TryUrl(cpe_ms, 'https://evilgfsvc.com'))
        self.assertFalse(TryUrl(cpe_ms, 'https://gfsvc.com.evil.com'))

        # No restrictions
        cpe_ms = ms.CpeManagementServer(platform_config=FakePlatformConfig(),
                                        port=5,
                                        ping_path='/')
        self.assertTrue(TryUrl(cpe_ms, 'https://bugger.gfsvc.com'))
        self.assertTrue(TryUrl(cpe_ms, 'https://gfsvc.com.evil.com'))

        # Single domain
        cpe_ms = ms.CpeManagementServer(platform_config=FakePlatformConfig(),
                                        port=5,
                                        ping_path='/',
                                        restrict_acs_hosts='.gfsvc.com')
        self.assertTrue(TryUrl(cpe_ms, 'https://bugger.gfsvc.com'))
        self.assertTrue(TryUrl(cpe_ms, 'https://acs.prod.gfsvc.com'))
        self.assertFalse(TryUrl(cpe_ms, 'https://acs.prod.google.com'))
        self.assertFalse(TryUrl(cpe_ms, 'https://google.com'))
        self.assertFalse(TryUrl(cpe_ms, 'https://imposter.evilgfsvc.com'))
        self.assertFalse(TryUrl(cpe_ms, 'https://evilgfsvc.com'))
        self.assertFalse(TryUrl(cpe_ms, 'https://gfsvc.com.evil.com'))
 def testAcsUrl(self):
     pc = MockPlatformConfig()
     cpe_ms = ms.CpeManagementServer(platform_config=pc,
                                     port=0,
                                     ping_path='')
     self.assertEqual(cpe_ms.URL, 'http://acs.example.com/cwmp')
     self.assertRaises(AttributeError, cpe_ms.SetURL, 'http://example.com/')
     self.assertTrue(pc.set_acs_url_called)
     pc.set_acs_raise = False
     pc.set_acs_url_called = False
     cpe_ms.URL = 'http://example.com/'
     self.assertTrue(pc.set_acs_url_called)
     self.assertEqual(pc.acs_url, 'http://example.com/')
 def testInvalidateUrl(self):
     mock_config = MockAcsConfig()
     mock_config.acs_url_list = [
         'http://foo1.com', 'https://foo.prod.gfsvc.com', 'http://foow2.com'
     ]
     cpe_ms = ms.CpeManagementServer(acs_config=mock_config,
                                     port=5,
                                     ping_path='/',
                                     restrict_acs_hosts='.gfsvc.com')
     self.assertEqual('https://foo.prod.gfsvc.com', cpe_ms.URL)
     self.assertEqual(2, len(mock_config.acs_url_list))
     mock_config.acs_url_list = ['http://foo1.com', 'http://foow2.com']
     self.assertEqual(None, cpe_ms.URL)
 def testWriteParameters(self):
     cpe_ms = ms.CpeManagementServer(platform_config=None,
                                     port=5,
                                     ping_path='/',
                                     restrict_acs_hosts='.gfsvc.com')
     cpe_ms.CWMPRetryMinimumWaitInterval = 10
     cpe_ms.CWMPRetryIntervalMultiplier = 100
     cpe_ms.ConnectionRequestPassword = '******'
     cpe_ms.ConnectionRequestUsername = '******'
     cpe_ms.DefaultActiveNotificationThrottle = True
     cpe_ms.PeriodicInformEnable = True
     cpe_ms.PeriodicInformInterval = 10
     cpe_ms.PeriodicInformTime = '2012-08-22T15:50:14.725772Z'
     cpe_ms.Password = '******'
     cpe_ms.Username = '******'
    def testPeriodicLongInterval(self):
        ms.PERIODIC_CALLBACK = MockPeriodicCallback
        io = MockIoloop()
        cpe_ms = ms.CpeManagementServer(
            platform_config=FakePlatformConfig(),
            port=0,
            ping_path='/',
            start_periodic_session=self.start_session,
            ioloop=io)
        cpe_ms.PeriodicInformEnable = 'true'
        cpe_ms.PeriodicInformTime = cwmpdate.format(datetime.datetime.now())
        cpe_ms.PeriodicInformInterval = '1200'

        # Just check that the delay is reasonable
        self.assertNotEqual(io.timeout_time, datetime.timedelta(seconds=0))
 def testReadParameters(self):
     cpe_ms = ms.CpeManagementServer(platform_config=None,
                                     port=5,
                                     ping_path='/',
                                     restrict_acs_hosts='.gfsvc.com')
     _ = cpe_ms.CWMPRetryMinimumWaitInterval
     _ = cpe_ms.CWMPRetryIntervalMultiplier
     _ = cpe_ms.ConnectionRequestPassword
     _ = cpe_ms.ConnectionRequestUsername
     _ = cpe_ms.DefaultActiveNotificationThrottle
     _ = cpe_ms.EnableCWMP
     _ = cpe_ms.PeriodicInformEnable
     _ = cpe_ms.PeriodicInformInterval
     _ = cpe_ms.PeriodicInformTime
     _ = cpe_ms.Password
     _ = cpe_ms.Username
예제 #13
0
 def testPeriodicEnable(self):
     ms.PERIODIC_CALLBACK = MockPeriodicCallback
     cpe_ms = ms.CpeManagementServer(
         acs_config=FakeAcsConfig(),
         port=0,
         ping_path='/',
         start_periodic_session=self.start_session)
     cpe_ms.PeriodicInformEnable = 'true'
     cpe_ms.PeriodicInformInterval = '15'
     loop = mainloop.MainLoop()
     loop.RunOnce()
     # cpe_ms should schedule the callbacks when Enable and Interval both set
     self.assertEqual(len(periodic_callbacks), 1)
     cb = periodic_callbacks[0]
     self.assertTrue(cb.callback)
     self.assertGreater(cb.callback_time, 0)
예제 #14
0
  def __init__(self, ip, cpe, listenport, acs_config,
               ping_path, acs_url=None, fetch_args=None,
               ioloop=None, restrict_acs_hosts=None):
    tornado.httpclient.AsyncHTTPClient.configure(
        'tornado.curl_httpclient.CurlAsyncHTTPClient')
    # pylint:disable=protected-access
    oldcreate = tornado.curl_httpclient._curl_create
    tornado.curl_httpclient._curl_create = (
        lambda *args, **kwargs: CurlCreator(oldcreate, *args, **kwargs))
    # pylint:enable=protected-access
    self.cpe = cpe
    self.cpe_soap = api_soap.CPE(self.cpe)
    self.encode = api_soap.Encode()
    self.cwmplogger = cwmplog.Logger(full_logs=10)
    self.outstanding = None
    self.response_queue = []
    self.request_queue = []
    self.event_queue = LimitDeque(MAX_EVENT_QUEUE_SIZE, self.EventQueueHandler)
    self.ioloop = ioloop or tornado.ioloop.IOLoop.instance()
    self.retry_count = 0  # for Inform.RetryCount
    self.start_session_timeout = None  # timer for CWMPRetryInterval
    self.session = None
    self.my_configured_ip = ip
    self.fetch_args = fetch_args or dict()
    self.ping_rate_limit_seconds = 2
    self.previous_ping_time = 0
    self.ping_timeout_pending = None
    self._changed_parameters = set()
    self._changed_parameters_sent = set()
    self._acs_config = acs_config
    self.cpe_management_server = cpe_management_server.CpeManagementServer(
        acs_url=acs_url, acs_config=acs_config, port=listenport,
        ping_path=ping_path, get_parameter_key=cpe.getParameterKey,
        start_periodic_session=self.NewPeriodicSession, ioloop=self.ioloop,
        restrict_acs_hosts=restrict_acs_hosts)
    self.last_success_response = 0  # used by DiagUI
    self.num_599_responses = 0
    self._acs_disabled_until = None

    try:
      notifier = filenotifier.FileNotifier(mainloop.MainLoop())
      self.watch_acs_disabled = notifier.WatchObj(self._AcsDisabledFilename(),
                                                  self._UpdateAcsDisabled)
      self._UpdateAcsDisabled()
    except pyinotify.WatchManagerError:
      print 'cwmp temp dir (%s) does not exist' % CWMP_TMPDIR
    def testSessionRetryWait(self):
        """Test $SPEC3 Table3 timings."""

        cpe_ms = ms.CpeManagementServer(platform_config=FakePlatformConfig(),
                                        port=5,
                                        ping_path='/')
        cpe_ms.PeriodicInformInterval = 100000
        for _ in range(1000):
            self.assertEqual(cpe_ms.SessionRetryWait(0), 0)
            self.assertTrue(5 <= cpe_ms.SessionRetryWait(1) <= 10)
            self.assertTrue(10 <= cpe_ms.SessionRetryWait(2) <= 20)
            self.assertTrue(20 <= cpe_ms.SessionRetryWait(3) <= 40)
            self.assertTrue(40 <= cpe_ms.SessionRetryWait(4) <= 80)
            self.assertTrue(80 <= cpe_ms.SessionRetryWait(5) <= 160)
            self.assertTrue(160 <= cpe_ms.SessionRetryWait(6) <= 320)
            self.assertTrue(320 <= cpe_ms.SessionRetryWait(7) <= 640)
            self.assertTrue(640 <= cpe_ms.SessionRetryWait(8) <= 1280)
            self.assertTrue(1280 <= cpe_ms.SessionRetryWait(9) <= 2560)
            self.assertTrue(2560 <= cpe_ms.SessionRetryWait(10) <= 5120)
            self.assertTrue(2560 <= cpe_ms.SessionRetryWait(99) <= 5120)
        cpe_ms.CWMPRetryMinimumWaitInterval = 10
        cpe_ms.CWMPRetryIntervalMultiplier = 2500
        for _ in range(1000):
            self.assertEqual(cpe_ms.SessionRetryWait(0), 0)
            self.assertTrue(10 <= cpe_ms.SessionRetryWait(1) <= 25)
            self.assertTrue(25 <= cpe_ms.SessionRetryWait(2) <= 62)
            self.assertTrue(62 <= cpe_ms.SessionRetryWait(3) <= 156)
            self.assertTrue(156 <= cpe_ms.SessionRetryWait(4) <= 390)
            self.assertTrue(390 <= cpe_ms.SessionRetryWait(5) <= 976)
            self.assertTrue(976 <= cpe_ms.SessionRetryWait(6) <= 2441)
            self.assertTrue(2441 <= cpe_ms.SessionRetryWait(7) <= 6103)
            self.assertTrue(6103 <= cpe_ms.SessionRetryWait(8) <= 15258)
            self.assertTrue(15258 <= cpe_ms.SessionRetryWait(9) <= 38146)
            self.assertTrue(38146 <= cpe_ms.SessionRetryWait(10) <= 95367)
            self.assertTrue(38146 <= cpe_ms.SessionRetryWait(99) <= 95367)
        # Check that the time never exceeds the periodic inform time.
        cpe_ms.PeriodicInformInterval = 30
        for _ in range(1000):
            self.assertEqual(cpe_ms.SessionRetryWait(0), 0)
            self.assertTrue(10 <= cpe_ms.SessionRetryWait(1) <= 25)
            self.assertTrue(12 <= cpe_ms.SessionRetryWait(2) <= 30)
            self.assertTrue(12 <= cpe_ms.SessionRetryWait(3) <= 30)
    def testPeriodicEnable(self):
        ms.PERIODIC_CALLBACK = MockPeriodicCallback
        io = MockIoloop()
        cpe_ms = ms.CpeManagementServer(
            platform_config=FakePlatformConfig(),
            port=0,
            ping_path='/',
            start_periodic_session=self.start_session,
            ioloop=io)
        cpe_ms.PeriodicInformEnable = 'true'
        cpe_ms.PeriodicInformInterval = '15'
        # cpe_ms should schedule the callbacks when Enable and Interval both set

        self.assertEqual(io.timeout_time, datetime.timedelta(0.0))
        self.assertEqual(len(periodic_callbacks), 1)
        cb = periodic_callbacks[0]
        self.assertTrue(cb.callback)
        self.assertEqual(cb.callback_time, 15 * 1000)
        self.assertEqual(cb.io_loop, io)

        io.timeout_callback()
        self.assertTrue(cb.start_called)
예제 #17
0
    def testAcsUrl(self):
        conman_dir = tempfile.mkdtemp()
        try:
            pc = MockAcsConfig()
            cpe_ms = ms.CpeManagementServer(acs_config=pc,
                                            port=0,
                                            ping_path='',
                                            conman_dir=conman_dir)

            self.assertEqual(cpe_ms.URL, 'http://acs.example.com/cwmp')
            self.assertRaises(AttributeError, cpe_ms.SetURL,
                              'http://example.com/')
            self.assertTrue(pc.set_acs_url_called)

            pc.set_acs_raise = False
            pc.set_acs_url_called = False

            cpe_ms.URL = 'http://example.com/'
            self.assertTrue(pc.set_acs_url_called)
            self.assertEqual(pc.acs_url_list[0], 'http://example.com/')
            self.assertEqual(cpe_ms.URL, 'http://example.com/')

            # Test URLs which already contain GET params.
            cpe_ms.URL = 'http://example.com/?foo=bar'
            self.assertEqual(pc.acs_url_list[0], 'http://example.com/?foo=bar')
            self.assertEqual(cpe_ms.URL, 'http://example.com/?foo=bar')

            # Test URL which already contains noautoprov.
            cpe_ms.URL = 'http://example.com/?foo=bar&options=noautoprov'
            self.assertEqual(pc.acs_url_list[0],
                             'http://example.com/?foo=bar&options=noautoprov')
            self.assertEqual(cpe_ms.URL,
                             'http://example.com/?foo=bar&options=noautoprov')

        finally:
            shutil.rmtree(conman_dir)
 def testParameterKey(self):
     cpe_ms = ms.CpeManagementServer(platform_config=FakePlatformConfig(),
                                     port=0,
                                     ping_path='/',
                                     get_parameter_key=self.GetParameterKey)
     self.assertEqual(cpe_ms.ParameterKey, self.GetParameterKey())