Esempio n. 1
0
    def test_get_reverse_proxy_returns_probability_and_caches(self):
        # If the entity exists, get_reverse_proxy should return it.
        ndt7_probability = model.ReverseProxyProbability(
            name="ndt7", probability=1.0, url="https://fake.appspot.com")
        ndt_ssl_probability = model.ReverseProxyProbability(
            name="ndt_ssl", probability=1.0, url="https://fake.appspot.com")
        ndt7_probability.put()
        ndt_ssl_probability.put()

        actual = reverse_proxy.get_reverse_proxy('ndt_ssl')

        self.assertEqual(actual.name, ndt_ssl_probability.name)
        self.assertEqual(actual.probability, ndt_ssl_probability.probability)
        self.assertEqual(actual.url, ndt_ssl_probability.url)
Esempio n. 2
0
    def test_try_reverse_proxy_url_when_probability_zero_returns_emptystr(
            self):
        ndt_zero_probability = model.ReverseProxyProbability(
            name="ndt_ssl", probability=0.0, url="https://fake.appspot.com")
        ndt_zero_probability.put()
        mock_request = mock.Mock()
        mock_request.path = '/ndt_ssl'

        url = reverse_proxy.try_reverse_proxy_url(mock_request)

        self.assertEqual(url, "")
Esempio n. 3
0
    def test_try_reverse_proxy_url_when_outside_business_returns_emptystr(
            self):
        ndt_ssl_probability = model.ReverseProxyProbability(
            name="ndt_ssl", probability=1.0, url="https://fake.appspot.com")
        ndt_ssl_probability.put()
        mock_request = mock.Mock()
        mock_request.path = '/ndt_ssl'
        t = datetime.datetime(2019, 1, 25, 16, 0, 0)

        url = reverse_proxy.try_reverse_proxy_url(mock_request, t)

        self.assertEqual(url, "")
Esempio n. 4
0
    def test_get_reverse_proxy_caches_entities(self):
        # get_reverse_proxy should refresh memcache at each cache miss.
        ndt7_probability = model.ReverseProxyProbability(
            name="ndt7", probability=1.0, url="https://fake.appspot.com")
        ndt_ssl_probability = model.ReverseProxyProbability(
            name="ndt_ssl", probability=1.0, url="https://fake.appspot.com")
        ndt7_probability.put()
        ndt_ssl_probability.put()

        reverse_proxy.get_reverse_proxy("ndt_ssl")

        cached_ndt = memcache.get(
            "ndt_ssl", namespace=constants.MEMCACHE_NAMESPACE_REVERSE_PROXY)
        cached_ndt7 = memcache.get(
            "ndt7", namespace=constants.MEMCACHE_NAMESPACE_REVERSE_PROXY)
        self.assertEqual(cached_ndt.name, ndt_ssl_probability.name)
        self.assertEqual(cached_ndt.probability,
                         ndt_ssl_probability.probability)
        self.assertEqual(cached_ndt.url, ndt_ssl_probability.url)

        self.assertEqual(cached_ndt7.name, ndt7_probability.name)
        self.assertEqual(cached_ndt7.probability, ndt7_probability.probability)
        self.assertEqual(cached_ndt7.url, ndt7_probability.url)
Esempio n. 5
0
    def test_try_reverse_proxy_url_returns_url_with_latlon(self):
        ndt_ssl_probability = model.ReverseProxyProbability(
            name="ndt_ssl", probability=1.0, url="https://fake.appspot.com")
        ndt_ssl_probability.put()
        mock_request = mock.Mock()
        mock_request.path = '/ndt_ssl'
        mock_request.path_qs = '/ndt_ssl?format=geo_options'
        mock_request.latitude = 40.7
        mock_request.longitude = 74.0

        actual_url = reverse_proxy.try_reverse_proxy_url(mock_request)

        self.assertEqual(actual_url, (
            'https://fake.appspot.com/ndt_ssl?format=geo_options&lat=40.700000'
            '&lon=74.000000'))
Esempio n. 6
0
    def test_try_reverse_proxy_url_returns_url_with_only_latlon(self):
        ndt_ssl_probability = model.ReverseProxyProbability(
            name="ndt_ssl", probability=1.0, url="https://fake.appspot.com")
        ndt_ssl_probability.put()
        mock_request = mock.Mock()
        mock_request.path = '/ndt_ssl'
        mock_request.path_qs = '/ndt_ssl'
        mock_request.latitude = 40.7
        mock_request.longitude = 74.0
        t = datetime.datetime(2019, 1, 24, 16, 0, 0)

        actual_url = reverse_proxy.try_reverse_proxy_url(mock_request, t)

        self.assertEqual(
            actual_url,
            'https://fake.appspot.com/ndt_ssl?lat=40.700000&lon=74.000000')
Esempio n. 7
0
import logging
import random

from google.appengine.api import memcache

from mlabns.db import model
from mlabns.util import constants

# Default value if datastore contains no record for a given experiment.
# This object should not be returned directly, but you can make a copy
# with a custom name by calling default_reverse_proxy.with_name("name").
default_reverse_proxy = model.ReverseProxyProbability(
    name="default", probability=0.0, url="https://mlab-ns.appspot.com")


def get_reverse_proxy(experiment):
    """Reads the ReverseProxyProbability record for an experiment.

    If the entity is not cached, it also refreshes the cache.
    """
    reverse_proxy = memcache.get(
        experiment, namespace=constants.MEMCACHE_NAMESPACE_REVERSE_PROXY)

    if reverse_proxy is None:
        # Update ReverseProxyProbability for all the experiments.
        for prob in model.ReverseProxyProbability.all().run():
            if experiment == prob.name:
                reverse_proxy = prob

            if not memcache.set(
                    prob.name,