Exemplo n.º 1
0
    def test_UserOptIn2(self):
        """
        Test a user opting in.
        """
        from expedient.common.tests.client import Browser
        from openflow.optin_manager.opts.models import Experiment,ExperimentFLowSpace
        import random
                
        slices = self.fv_clients[0].api.listSlices()
        self.assertEqual(len(slices), 1) # root
        
        # get the resources
        slice_urn, cred = self.create_ch_slice()
        options = dict(geni_compressed=False, geni_available=True)
        rspec = self.am_client.ListResources(cred, options)
        
        # Create switches and links
        switches, links = parse_rspec(rspec)
        
        exp = Experiment.objects.create(slice_id="slice_id", project_name="project name",
                      project_desc="project description", slice_name="slice name",
                      slice_desc="slice description", controller_url="controller url",
                      owner_email="owner email", owner_password="******")
            
        for switch in switches:
            exp_ip_src_s = random.randint(0,0x80000000) & 0xFFFF0000
            exp_ip_src_e = random.randint(0x80000000,0xFFFFFFFF) & 0xFFFF0000
            ExperimentFLowSpace.objects.create(exp=exp, dpid=switch.dpid,
                            ip_src_s=exp_ip_src_s, 
                            ip_src_e=exp_ip_src_e, 
                             )

        logger.debug("Done creating sliver")

        # Get user to opt in
        logger.debug("Logging into browser")
        b = Browser()
        logged_in = b.login(SCHEME+"://%s:%s/accounts/login/"%
                            (test_settings.HOST, test_settings.OM_PORT),
                            "user","password")
        self.assertTrue(logged_in,"Could not log in")
        logger.debug("Login success")
#        drop_to_shell(local=locals())

        f = b.get_and_post_form(SCHEME+"://%s:%s/opts/opt_in"%
                                (test_settings.HOST, test_settings.OM_PORT),
                                dict(experiment=1))
        logger.debug("Posted opt-in request, reading response.")
        res = f.read()
        self.assertEqual(f.code, 200)
        self.assertTrue("successfully" in res, "Did not get successful opt in message: %s" % res)
        
        logger.debug("Response fine, opting out.")
        # now test opt out:
        f = b.get_and_post_form(SCHEME+"://%s:%s/opts/opt_out"%
                                (test_settings.HOST, test_settings.OM_PORT),
                                {"1":"checked"})
        res = f.read()
        self.assertEqual(f.code, 200)
        self.assertTrue("Successful" in res, "Returned %s"%res)
Exemplo n.º 2
0
    def test_UserOptIn1(self):
        """
        Test a user opting in.
        """
        from expedient.common.tests.client import Browser
        
        #create an experiment through CH
        self.create_sliver_core(fs_randomness=False)
        
        logger.debug("Done creating sliver")

        # Get user to opt in
        logger.debug("Logging into browser")
        b = Browser()
        logged_in = b.login(SCHEME+"://%s:%s/accounts/login/"%
                            (test_settings.HOST, test_settings.OM_PORT),
                            "user","password")
        self.assertTrue(logged_in,"Could not log in")
        logger.debug("Login success")
#        drop_to_shell(local=locals())

        f = b.get_and_post_form(SCHEME+"://%s:%s/opts/opt_in"%
                                (test_settings.HOST, test_settings.OM_PORT),
                                dict(experiment=1))
        logger.debug("Posted opt-in request, reading response.")
        res = f.read()
        self.assertEqual(f.code, 200)
        self.assertTrue("successfully" in res, "Did not get successful opt in message: %s" % res)
        
        
        # test if FV has the expected flowspace match entries
        from expedient.common.tests.utils import run_cmd
        fvctl = run_cmd(
            "sh %s/scripts/fvctl.sh listFlowSpace" % (
                test_settings.FLOWVISOR_DIR,
            ),
        )
        data = fvctl.communicate(input="rootpassword")
        fv_rules = data[0].split("\n")
        print(fv_rules)
        #for fv_rule in fv_rules
        
        logger.debug("Response fine, opting out.")
        # now test opt out:
        f = b.get_and_post_form(SCHEME+"://%s:%s/opts/opt_out"%
                                (test_settings.HOST, test_settings.OM_PORT),
                                {"1":"checked"})
        res = f.read()
        self.assertEqual(f.code, 200)
        self.assertTrue("Successful" in res, "Returned %s"%res)        
Exemplo n.º 3
0
    def prepare_ch(self, proj_dir, ch_host, ch_port, ch_username, ch_passwd, 
                   om_host, om_port):
        """
        Flush and prepare the CH DB.
        Add the OMs to the CH.
        """
        from os.path import dirname
        
        subprocess.call(shlex.split(
            "python %s/manage.py flush --noinput" % proj_dir))
        subprocess.call(shlex.split(
            "python %s/manage.py syncdb --noinput" % proj_dir))
        subprocess.call(shlex.split(
            "python %s/manage.py createsuperuser --noinput "
            "--username=expedient [email protected]"  % proj_dir))
        subprocess.call(shlex.split(
            "python %s/manage.py set_fake_passwords"
            " --password=expedient"  % proj_dir))

        browser = Browser()
        browser.login(
            SCHEME+"://%s:%s%s" % (
                ch_host, ch_port, "/accounts/login/"),
            "expedient", "expedient")
        response = browser.get_and_post_form(
            url=SCHEME+"://%s:%s%s" % (
                ch_host, ch_port, "/openflow/aggregate/create/"),
            params=dict(
                name="Test OM",
                description="TestOM Description",
                location="Stanford, CA",
                usage_agreement="Do you agree?",
                username=ch_username,
                password=ch_passwd,
                url=SCHEME+"://%s:%s%s" % (
                    om_host, om_port, "/xmlrpc/xmlrpc/"),
            ),
            del_params=["verify_certs"],
        )
        self.assertTrue(
            response.geturl() == \
                SCHEME+"://%s:%s%s" % (
                    ch_host, ch_port, "/openflow/aggregate/1/links/"),
            "Did not redirect after create correctly. Response was: %s"
            % response.read(),
        )
Exemplo n.º 4
0
def http_wrap_opt_in(username, password, url, project_name, slice_name,
                     priority):
    b = Browser()

    #log in first
    log_in_url = "%s/accounts/login/" % url
    logged_in = b.login(log_in_url, "user", "password")
    if not logged_in:
        return "Log in unsuccessful. Please check username and password"

    #get experiment id:
    opt_in_url = "%s/opts/opt_in" % url
    f = b.get_form(opt_in_url)
    options = b.get_select_choices(f.read(), "experiment")
    try:
        id = options["%s:%s" % (project_name, slice_name)]
    except Exception, e:
        return "Experiment %s:%s doesn't exist" % (project_name, slice_name)
Exemplo n.º 5
0
def http_wrap_opt_out(username, password, url, project_name, slice_name):
    b = Browser()

    #log in first
    log_in_url = "%s/accounts/login/" % url
    logged_in = b.login(log_in_url, "user", "password")
    if not logged_in:
        return "Log in unsuccessful. Please check username and password"

    #get experiment id:
    opt_out_url = "%s/opts/opt_out" % url
    f = b.get_form(opt_out_url)
    options = b.get_checkbox_choices(f.read())

    try:
        id = options["%s:%s" % (project_name, slice_name)]
    except Exception, e:
        return "%s has not opted into experiment %s:%s" % (
            username, project_name, slice_name)
Exemplo n.º 6
0
Arquivo: gapi.py Projeto: cargious/ocf
    def setUp(self):
        """
        Load the DB fixtures for the AM (running using Apache).
        Create an xml-rpc client to talk to the AM Proxy through GAPI.
        Run the test Expedient, and create client to talk to it.
        """

        import time, httplib, os

        call_env_command(settings.CH_PROJECT_DIR, "flush", interactive=False)
        call_env_command(settings.CH_PROJECT_DIR, "syncdb", interactive=False)

        logger.debug("setup started")

        # now we can import django stuff
        from django.core.urlresolvers import reverse
        from django.conf import settings as djangosettings
        from openflow.plugin.models import OpenFlowAggregate

        self.assertEqual(OpenFlowAggregate.objects.all().count(), 0)

        self.create_users()

        self.browser = Browser()
        self.browser.login(get_base_url(reverse("auth_login")),
                           username="******",
                           password="******")

        self.setup_dummy_oms()

        # store the trusted CA dir
        self.before = os.listdir(djangosettings.XMLRPC_TRUSTED_CA_PATH)

        # Create the ssl certificates
        cmd = "make -C %s" % settings.SSL_DIR
        run_cmd(cmd).wait()

        # add the certificate to apache's certificate dir
        try:
            os.unlink(join(settings.APACHE_CERTS_DIR, "test-ca.crt"))
        except OSError as e:
            if "Errno 2" in "%s" % e:
                pass
            else:
                raise
        os.symlink(os.path.abspath(join(settings.SSL_DIR, "ca.crt")),
                   join(settings.APACHE_CERTS_DIR, "test-ca.crt"))
        subprocess.call(shlex.split("make -C %s" % settings.APACHE_CERTS_DIR))

        # run the CH
        kill_old_procs(settings.GCH_PORT, settings.GAM_PORT)
        cmd = "python %s -u %s -r %s -c %s -k %s -p %s --debug -H 0.0.0.0" % (
            join(settings.GCF_DIR, "gch.py"),
            join(settings.SSL_DIR, "experimenter.crt"),
            join(settings.SSL_DIR, "certs"),
            join(settings.SSL_DIR, "ch.crt"),
            join(settings.SSL_DIR, "ch.key"),
            settings.GCH_PORT,
        )
        self.ch_proc = run_cmd(cmd, pause=True)

        #        # run the AM proxy
        #        cmd = "python %s -r %s -c %s -k %s -p %s -u %s --debug -H 0.0.0.0" % (
        #            join(settings.GCF_DIR, "gam.py"),
        #            join(settings.SSL_DIR, "certs"),
        #            join(settings.SSL_DIR, "server.crt"),
        #            join(settings.SSL_DIR, "server.key"),
        #            settings.GAM_PORT,
        #            SCHEME + "://%s:%s/openflow/gapi/" % (settings.HOST, settings.CH_PORT),
        #        )
        #        self.am_proc = run_cmd(cmd, pause=True)

        ch_host = "%s:%s" % (settings.HOST, settings.GCH_PORT)
        cert_transport = SafeTransportWithCert(
            keyfile=join(settings.SSL_DIR, "experimenter.key"),
            certfile=join(settings.SSL_DIR, "experimenter.crt"))
        self.ch_client = xmlrpclib.ServerProxy("https://" + ch_host + "/",
                                               transport=cert_transport)

        am_host = "%s:%s" % (settings.HOST, settings.CH_PORT)
        cert_transport = SafeTransportWithCert(
            keyfile=join(settings.SSL_DIR, "experimenter.key"),
            certfile=join(settings.SSL_DIR, "experimenter.crt"))
        self.am_client = xmlrpclib.ServerProxy("https://" + am_host +
                                               "/openflow/gapi/",
                                               transport=cert_transport)

        logger.debug("setup done")
Exemplo n.º 7
0
Arquivo: om.py Projeto: cargious/ocf
    def test_optin(self):
        from expedient.common.tests.client import Browser
        from openflow.optin_manager.opts.models import UserOpts, OptsFlowSpace 
        from openflow.optin_manager.opts.models import AdminFlowSpace, UserFlowSpace,Experiment, ExperimentFLowSpace
        from django.contrib.auth.models import User
        #make a normal user on system
        username = "******"
        password = "******"
        u = User.objects.create(username=username, is_active=True)
        u.set_password(password)
        u.save()

        
        #assign a flowspace to the user and experiment
        self.user_ip_src_s = random.randint(0,0x80000000) & 0xFFFF0000
        self.user_ip_src_e = random.randint(0x80000000,0xFFFFFFFF) & 0xFFFF0000
      
        self.exp_ip_src_s = random.randint(0,0x80000000) & 0xFFFF0000
        self.exp_ip_src_e = random.randint(0x80000000,0xFFFFFFFF) & 0xFFFF0000
        fields=["dl_src","dl_dst","vlan_id","tp_src","tp_dst"]
        random.shuffle(fields)


        from openflow.optin_manager.xmlrpc_server.ch_api import om_ch_translate
        (to_str,from_str,width,om_name,of_name) = om_ch_translate.attr_funcs[fields[0]]
        self.user_field_name = om_name
        self.user_field_s = random.randint(0,2**width-3)
        self.user_field_e = self.user_field_s + 1
        (to_str,from_str,width,om_name,of_name) = om_ch_translate.attr_funcs[fields[1]]
        self.exp_field_name = om_name
        self.exp_field_s = random.randint(0,2**width-3)
        self.exp_field_e = self.exp_field_s + 1  
        
        # assign full flowspace to admin:
        adm = User.objects.get(username="******")
        AdminFlowSpace.objects.create(user=adm)
        
        #assign flowspace to user
        ufs = UserFlowSpace(user=u, ip_src_s=self.user_ip_src_s,
                             ip_src_e=self.user_ip_src_e,approver=adm)
        setattr(ufs,"%s_s"%self.user_field_name,self.user_field_s)
        setattr(ufs,"%s_e"%self.user_field_name,self.user_field_e)
        ufs.save()     
        
        #create an experiment and assign a flowspace to it
        exp = Experiment.objects.create(slice_id="slice_id", project_name="project name",
                                  project_desc="project description", slice_name="slice name",
                                  slice_desc="slice description", controller_url="controller url",
                                  owner_email="owner email", owner_password="******") 
        expfs = ExperimentFLowSpace.objects.create(exp=exp, dpid="00:00:00:00:00:00:01",
                            ip_src_s=self.exp_ip_src_s, 
                            ip_src_e=self.exp_ip_src_e, 
                             )
        setattr(expfs,"%s_s"%self.exp_field_name,self.exp_field_s)
        setattr(expfs,"%s_e"%self.exp_field_name,self.exp_field_e)
        expfs.save() 
        
        # First authenticate
        b = Browser()

        logged_in = b.login(SCHEME+"://%s:%s/accounts/login/"%
                            (test_settings.HOST, test_settings.OM_PORT),
                            "user","password")
        self.assertTrue(logged_in,"Could not log in")
        
        g = b.get_and_post_form(SCHEME+"://%s:%s/opts/opt_in"%
                                (test_settings.HOST, test_settings.OM_PORT),
                                dict(experiment=1))
        
        uopt = UserOpts.objects.filter(user__username__exact="user")[0]
        
        self.assertEqual(uopt.priority , 1)
        
        optfs = OptsFlowSpace.objects.filter(opt = uopt)[0]
        self.assertEqual(optfs.ip_src_s , max(self.user_ip_src_s,self.exp_ip_src_s))
        self.assertEqual(optfs.ip_src_e , min(self.user_ip_src_e,self.exp_ip_src_e))
        self.assertEqual(getattr(optfs,"%s_s"%self.user_field_name), self.user_field_s)
        self.assertEqual(getattr(optfs,"%s_e"%self.user_field_name), self.user_field_e)
        self.assertEqual(getattr(optfs,"%s_s"%self.exp_field_name), self.exp_field_s)
        self.assertEqual(getattr(optfs,"%s_e"%self.exp_field_name), self.exp_field_e)

        # now test opt out:
        g = b.get_and_post_form(SCHEME+"://%s:%s/opts/opt_out"%
                                (test_settings.HOST, test_settings.OM_PORT),
                                {"1":"checked"})
        optfs = OptsFlowSpace.objects.filter(opt = uopt)
        self.assertEqual(optfs.count(),0) 
        self.create_more_exps()