Beispiel #1
0
    def cmfCreateNews(self, parent_url):
        # return the doc_url
        lipsum = Lipsum()
        doc_id = lipsum.getUniqWord().lower()
        params = [["type_name", "News Item"], ["id", doc_id], ["add", "Add"]]
        self.post("%s/folder_factories" % parent_url,
                  params,
                  description="Create an empty news")
        params = [["allow_discussion", "default"],
                  ["title", lipsum.getSubject()],
                  ["description:text",
                   lipsum.getParagraph()], ["subject:lines",
                                            lipsum.getWord()],
                  ["format", "text/plain"],
                  ["change_and_view", "Change and View"]]
        doc_url = "%s/%s" % (parent_url, doc_id)
        self.post("%s/metadata_edit_form" % doc_url,
                  params,
                  description="Set metadata")
        self.assert_('Metadata changed.' in self.getBody())

        params = [["text_format", "plain"],
                  ["description:text",
                   lipsum.getParagraph()], ["text:text",
                                            lipsum.getMessage()],
                  ["change_and_view", "Change and View"]]
        self.post("%s/newsitem_edit_form" % doc_url,
                  params,
                  description="Set news content")
        self.assert_('News Item changed.' in self.getBody())
        return doc_url
Beispiel #2
0
    def test_buy_tickets(self):
        get_request = self.get(self.site_url + '/get')
        self.assert_(get_request.code == 200, "expecting a 200")

        item = Lipsum().getWord()
        id_ = Lipsum().getUniqWord()

        post_request = self.post(self.site_url + '/post',
                                 params=[['item', item],
                                         ['id', id_]])

        self.assert_(post_request.code == 200, "expecting a 200")

        put_request = self.put(self.site_url + '/put',
                               params=[['item', item],
                                       ['id', id_]])
        self.assert_(put_request.code == 200, "expecting a 200")
    def setUp(self):
        """Setting up test."""
        self.server_url = self.conf_get('main', 'url')

        credential_host = self.conf_get('credential', 'host')
        credential_port = self.conf_getInt('credential', 'port')
        self.username, self.pwd = xmlrpc_get_credential(
            credential_host, credential_port, "group1")

        self.lipsum = Lipsum()
Beispiel #4
0
 def test_exampleGuestBook(self):
     server_url = self.zope_url
     self.get("%s/Examples/GuestBook" % server_url)
     server_url = self.zope_url
     self.setBasicAuth(self.admin_id, self.admin_pwd)
     lipsum = Lipsum()
     self.get("%s/Examples/GuestBook/addEntry.html" % server_url)
     params = [["guest_name", lipsum.getWord().capitalize()],
               ["comments", lipsum.getParagraph()]]
     self.post("%s/Examples/GuestBook/addEntry" % server_url, params)
     self.clearBasicAuth()
Beispiel #5
0
    def test_basic_navigation(self):
        # The description should be set in the configuration file
        server_url = self.server_url
        # begin of test ---------------------------------------------

        # /var/folders/0n/nbbtwsqs6zl3z6k91czbkkvr0000gn/T/tmp6np8jv_funkload/watch0001.request
        self.get(server_url + "/", description="Get /")
        self.assert_('Typography' in self.getBody(),
                     "Home page loading failure")

        # /var/folders/0n/nbbtwsqs6zl3z6k91czbkkvr0000gn/T/tmp6np8jv_funkload/watch0042.request
        self.get(server_url + "/news", description="Get /news")
        self.assert_('List of news' in self.getBody(),
                     "News list loading failure")
        # store the number of news
        # nb_news_before = len(self.listHref(content_pattern='View article'))

        # /var/folders/0n/nbbtwsqs6zl3z6k91czbkkvr0000gn/T/tmp6np8jv_funkload/watch0078.request
        self.get(server_url + "/news/create", description="Get /news/create")
        self.assert_('Create a news item' in self.getBody(),
                     "News form loading failure")

        # /var/folders/0n/nbbtwsqs6zl3z6k91czbkkvr0000gn/T/tmp6np8jv_funkload/watch0097.request
        title = Lipsum().getSubject(uniq=True)
        self.post(server_url + "/news/create",
                  params=[['title', title], ['text',
                                             Lipsum().getParagraph()],
                          ['submit', 'Create news item']],
                  description="Post /news/create")
        self.assert_('Congrats' in self.getBody(), "News creation failure")

        # /var/folders/0n/nbbtwsqs6zl3z6k91czbkkvr0000gn/T/tmp6np8jv_funkload/watch0099.request
        self.get(server_url + "/news", description="Get /news")
        # do we have one more news ?
        news_links = self.listHref(content_pattern='View article')
        # nb_news_after = len(news_links)
        # self.assert_(nb_news_after == nb_news_before + 1, "New news not listed")

        # /var/folders/0n/nbbtwsqs6zl3z6k91czbkkvr0000gn/T/tmp6np8jv_funkload/watch0101.request
        last_news = news_links[-1]
        self.get(server_url + "/%s" % last_news, description="Get new news")
class Webengine(FunkLoadTestCase):
    """Basic test of nuxeo webengine"""
    server_url = None
    _lipsum = Lipsum()
    ws_title = "FLNXTEST Webengine workspace"
    ws_id = "FLNXTEST Webengine works"
    dir_title = "FLNXTEST Page folder"
    dir_id = "FLNXTEST Page folder"
    tag = "FLNXTEST"

    def setUp(self):
        self.server_url = self.conf_get('main', 'url')
        self.credential_host = self.conf_get('credential', 'host')
        self.credential_port = self.conf_getInt('credential', 'port')
        self.cred_admin = xmlrpc_get_credential(self.credential_host,
                                                self.credential_port, 'admin')
        self.cred_member = xmlrpc_get_credential(self.credential_host,
                                                 self.credential_port,
                                                 'members')
        self.logd("setUp")

    def test_testWebengine(self):
        # begin of test ---------------------------------------------
        p = WebenginePage(self)

        (p.home().login(*self.cred_admin).admin().user_management())

        ws_path = '/'.join(('workspaces', self.ws_id))
        if p.viewDocumentPath(ws_path, raiseOn404=False) is None:
            p.createDocument('workspaces', self.ws_title, doc_type="Workspace")
        parent = '/'.join((ws_path, self.dir_id))
        if p.viewDocumentPath(parent, raiseOn404=False) is None:
            p.createDocument(ws_path, self.dir_title, doc_type="Folder")
        p.viewDocumentPath(parent)

        p.deleteDocument(ws_path)

        p.createUser('john', 'tiger', groups='members')
        p.logout()

        (p.home().login('john', 'tiger').home().logout())

        (p.home().login(*self.cred_admin).deleteUser('john').logout())

        # end of test -----------------------------------------------

    def tearDown(self):
        """Setting up test."""
        self.logd("tearDown.")
Beispiel #7
0
 def test_05_verifyUsers(self):
     server_url = self.server_url
     user_mail = self.conf_get('test_05_verifyUsers', 'mail')
     lipsum = Lipsum()
     self.setBasicAuth(*self.cred_admin)
     for user_id, user_pwd in xmlrpc_list_credentials(
             self.credential_host, self.credential_port, 'FL_Member'):
         params = [["member_id", user_id], ["member_email", user_mail],
                   ["password", user_pwd], ["confirm", user_pwd],
                   ["add", "Register"]]
         self.post("%s/join_form" % server_url, params)
         html = self.getBody()
         self.assert_(
             'Member registered' in html
             or 'The login name you selected is already in use' in html,
             "Member %s not created" % user_id)
     self.clearBasicAuth()
Beispiel #8
0
class CMF(NuxeoTestCase):
    """CMF
    This test use a configuration file CMF.conf.
    """
    _lipsum = Lipsum()
    usersWithTasks = []

    def setUp(self):
        """Setting up test."""
        self.logd("setUp")
        NuxeoTestCase.setUp(self)
        self.memberList = xmlrpc_list_credentials(self.credential_host,
                                                  self.credential_port,
                                                  'members')

    def createCaseItem(self, user, passwd, case, caseItem, pathToPdf):
        caseItemId = MailboxPage(self).login(
            user,
            passwd).viewDraftTab().createCaseItem(case, caseItem, pathToPdf)
        MailboxPage(self).logout()
        return caseItemId
Beispiel #9
0
class CMF(NuxeoTestCase):
    """CMF

    This test use a configuration file CMF.conf.
    """
    _lipsum = Lipsum()
    usersWithTasks = []

    def setUp(self):
        """Setting up test."""
        self.logd("setUp")
        NuxeoTestCase.setUp(self)
        self.memberList =  xmlrpc_list_credentials(self.credential_host,
                                                  self.credential_port,
                                                  'members')
    
    def test_CMF(self):
        users = self.memberList
        for i in users:
            MailboxPage(self).login(i[0], i[1]).logout()    
    
    def tearDown(self):
        """Setting up test."""
        self.logd("tearDown.\n")
Beispiel #10
0
class NuxeoTestCase(FunkLoadTestCase):
    server_url = None
    _lipsum = Lipsum()
    monitor_page = 0

    def setUp(self):
        self.server_url = self.conf_get('main', 'url')
        self.credential_host = self.conf_get('credential', 'host')
        self.credential_port = self.conf_getInt('credential', 'port')
        self.cred_admin = xmlrpc_get_credential(self.credential_host,
                                                self.credential_port, 'admin')
        self.cred_member = xmlrpc_get_credential(self.credential_host,
                                                 self.credential_port,
                                                 'members')
        self.pglog_file = self.conf_get('main', 'pglog', '')
        self.log_dir = self.conf_get('main', 'log_dir', '')
        if not self.in_bench_mode:
            self.monitor_page = self.conf_getInt('main', 'monitor_page', '0')
            if self.monitor_page:
                self.logd("Tracing pg and jvm heap")
                if os.path.exists(self.pglog_file):
                    self.pglogf = open(self.pglog_file)
                    self.pglogf.seek(0, 2)
                else:
                    self.pglog_file = None
        self.logd("setUp")

    def pglog(self):
        """Save the PostgreSQL log for the previous request, logtail."""
        if self.pglog_file is None:
            return
        # wait for async processing
        sleep(4)
        logfile = os.path.join(
            self.log_dir, "pg-%s-%3.3d.log" % (self.test_name, self.steps))
        lf = open(logfile, "w")
        while True:
            data = self.pglogf.read()
            if data:
                lf.write(data)
            else:
                break
        lf.close()

    def performFullGC(self):
        """Ask monitorctl.sh to perform a full GC."""
        if self.monitorctl_file is not None:
            command(self.monitorctl_file + " invoke-fgc")

    def performHeapHistoStart(self):
        """Perform a heap histo of page."""
        self.performHeapHisto("%s-%3.3d-before" %
                              (self.test_name, self.steps + 1))

    def performHeapHistoEnd(self):
        """Perform a heap histo of page."""
        self.performHeapHisto("%s-%3.3d-end" % (self.test_name, self.steps))

    def performHeapHisto(self, tag):
        """Perform a heap histo."""
        self.monitorctl_file = self.conf_get('main', 'monitorctl_file', '')
        if not os.path.exists(self.monitorctl_file):
            return
        log_dir = self.conf_get('main', 'log_dir', '')
        logfile = os.path.join(log_dir, "hh-%s.txt" % tag)
        status, output = command(self.monitorctl_file + " heap-histo")
        lf = open(logfile, "w")
        lf.write(output)
        lf.close()

    def getLastJsfState(self):
        return extractJsfState(self.getBody())

    def get(self, url, params=None, description=None, ok_codes=None):
        # Override to save pg logs and heap histo
        if self.monitor_page:
            self.performFullGC()
            self.performHeapHistoStart()
        ret = FunkLoadTestCase.get(self, url, params, description, ok_codes)
        if self.monitor_page:
            self.pglog()
            self.performHeapHistoEnd()
        return ret

    def post(self, url, params=None, description=None, ok_codes=None):
        # Override to save pg logs and heap histo
        if self.monitor_page:
            self.performFullGC()
            self.performHeapHistoStart()
        ret = FunkLoadTestCase.post(self, url, params, description, ok_codes)
        if self.monitor_page:
            self.pglog()
            self.performHeapHistoEnd()
        return ret
Beispiel #11
0
    def test_critical_path(self):
        server_url = self.server_url
        self.get(server_url, description='Get root URL')
        self.get(server_url + "/users/sign_up",
                 description="View the user signup page")

        auth_token = extract_token(
            self.getBody(), 'name="authenticity_token" type="hidden" value="',
            '"')
        email = Lipsum().getUniqWord() + "@" + Lipsum().getWord() + ".com"

        self.post(self.server_url + "/users",
                  params=[['user[email]', email],
                          ['user[password]', 'alphabet'],
                          ['user[password_confirmation]', 'alphabet'],
                          ['authenticity_token', auth_token],
                          ['commit', 'Sign up']],
                  description="Create New User")

        self.get(server_url + "/communities/new",
                 description="View the new communities page")
        auth_token = extract_token(
            self.getBody(), 'name="authenticity_token" type="hidden" value="',
            '"')

        community_name = Lipsum().getSentence()
        self.post(self.server_url + "/communities",
                  params=[['community[name]', community_name],
                          ['authenticity_token', auth_token],
                          ['commit', 'Create Community']],
                  description="Create New Community")
        last_url = self.getLastUrl()

        created_community_id = last_url.split('/')[-1]
        self.get(server_url + "/communities/" + created_community_id,
                 description="View the created community page")

        self.get(server_url + "/submissions/new",
                 description="View the new submissions page")
        auth_token = extract_token(
            self.getBody(), 'name="authenticity_token" type="hidden" value="',
            '"')

        submission_title = Lipsum().getSentence()
        submission_url = "http://www." + Lipsum().getWord() + Lipsum(
        ).getUniqWord() + ".com/"
        self.post(self.server_url + "/submissions",
                  params=[['submission[title]', submission_title],
                          ['submission[url]', submission_url],
                          ['submission[community_id]', created_community_id],
                          ['authenticity_token', auth_token],
                          ['commit', 'Create Submission']],
                  description="Create New Submission")
        last_url = self.getLastUrl()
        created_submission_id = last_url.split('/')[-1]

        self.get(server_url + "/comments/new",
                 description="View the new comments page")
        auth_token = extract_token(
            self.getBody(), 'name="authenticity_token" type="hidden" value="',
            '"')

        comment_message = Lipsum().getSentence()
        comment_parent = ''
        submission_id = created_submission_id
        self.post(self.server_url + "/comments",
                  params=[['comment[message]', comment_message],
                          ['comment[submission_id]', submission_id],
                          ['comment[parent_id]', comment_parent],
                          ['authenticity_token', auth_token],
                          ['commit', 'Create Comment']],
                  description="Create New Comment")
Beispiel #12
0
 def setUp(self):
     """Setting up test."""
     self.server_url = self.conf_get('main', 'url')
     self.lipsum = Lipsum()
 def setUp(self):
     """Setting up whitelist test."""
     self.title = self.conf_get('main', 'title')
     self.logd("Setting up test: %s\n" % self.title)
     self.lipsum = Lipsum()
class Dav(FunkLoadTestCase):
    ws_title = "FLNXTest-Dav-workspace"
    dir_title = "FLNXTEST-Dav-folder"
    tag = "FLNXTEST"
    _lipsum = Lipsum()

    def setUp(self):
        self.server_url = self.conf_get('main', 'url')
        self.credential_host = self.conf_get('credential', 'host')
        self.credential_port = self.conf_getInt('credential', 'port')
        self.cred_admin = xmlrpc_get_credential(self.credential_host,
                                                self.credential_port, 'admin')
        self.dav_url = self.server_url + "/site/dav"
        self.nb_docs = self.conf_getInt('testWriter', 'nb_docs')
        self.cred_member = xmlrpc_get_credential(self.credential_host,
                                                 self.credential_port,
                                                 'members')

    def initWorkspace(self):
        """Create an initial workspace using rest,
        because DAV is not allowed to create workspace."""
        r = RestAPI(self)
        r.login(*self.cred_admin)
        root_uid = r.getRootWorkspaceUid()
        ws_uid = r.getChildUid(root_uid, self.ws_title, 'Workspace')
        if not ws_uid:
            ws_uid = r.createDocument(root_uid, 'Workspace', self.ws_title,
                                      'DAV Test workspace description.')

    def testDav(self):
        self.initWorkspace()
        self.setBasicAuth(*self.cred_admin)
        dav_url = self.dav_url

        resp = self.options(dav_url, description="option on root")
        dav = resp.headers.get('DAV')
        self.assert_(dav is not None)
        self.assert_(dav == '1,2')
        allow = resp.headers.get('Allow')
        for method in ['PROPPATCH', 'MKCOL', 'COPY', 'MOVE', 'LOCK', 'UNLOCK']:
            self.assert_(method in allow)

        resp = self.propfind(dav_url,
                             depth=0,
                             description="propfind root depth0")
        # dom = parseString(self.getBody())
        #for node in dom.firstChild.childNodes:
        #    print node.toxml()
        resp = self.propfind(dav_url,
                             depth=1,
                             description="propfind root depth1")
        dom = parseString(self.getBody())
        for node in dom.getElementsByTagName('ns2:href'):
            url = node.firstChild.data
            # print url

        url = dav_url + "/" + self.ws_title
        folder_url = url + "/" + self.dir_title
        self.delete(folder_url,
                    ok_codes=[204, 404],
                    description="Remove folder")

        self.method("MKCOL",
                    folder_url,
                    ok_codes=[
                        201,
                    ],
                    description="Create a folder")
        resp = self.propfind(folder_url,
                             depth=0,
                             description="propfind root depth0")

        # create file
        doc_url = folder_url + '/' + self._lipsum.getUniqWord() + '.txt'
        content = self._lipsum.getSentence()
        self.put(doc_url,
                 params=Data(None, content),
                 description="Create a doc",
                 ok_codes=[
                     201,
                 ])
        # self.delete(folder_url, ok_codes=[204, ],
        #            description="Remove folder")

        self.clearBasicAuth()

    def testWriter(self):
        self.initWorkspace()
        self.setBasicAuth(*self.cred_admin)
        dav_url = self.dav_url
        url = dav_url + "/" + self.ws_title

        folder_url = url + "/" + self._lipsum.getUniqWord()
        # create a folder
        self.method("MKCOL",
                    folder_url,
                    ok_codes=[
                        201,
                    ],
                    description="Create a folder")
        #resp = self.propfind(folder_url, depth=0,
        #                     description="propfind root depth0")
        # create files
        for i in range(self.nb_docs):
            doc_url = folder_url + '/' + self._lipsum.getUniqWord() + '.txt'
            content = self._lipsum.getParagraph()
            self.put(doc_url,
                     params=Data(None, content),
                     description="Create a doc " + str(i),
                     ok_codes=[
                         201,
                     ])
        self.clearBasicAuth()

    def testUserAgents(self):
        dav_url = self.dav_url
        # check that nuxeo ask for digest auth for the following ua
        uas = [
            "MSFrontPage 1", "Microsoft-WebDAV-MiniRedir 1", "DavClnt"
            "litmus 1", "gvfs 1", "davfs 1", "WebDAV 1", "cadaver 1"
        ]
        for ua in uas:
            self.setUserAgent(ua)
            resp = self.propfind(dav_url,
                                 description="test ua auth for " + ua,
                                 ok_codes=[
                                     401,
                                 ])
            auth = resp.headers.get('WWW-Authenticate')
            # print auth
            self.assert_("Digest realm" in auth, "%s: %s" % (ua, auth))
        # unknown UA also requires authentication
        self.setUserAgent("FunkLoad")
        resp = self.propfind(dav_url,
                             description="test non DAV ua",
                             ok_codes=[
                                 401,
                             ])

    def testLocks(self):
        self.initWorkspace()
        self.setBasicAuth(*self.cred_admin)
        dav_url = self.dav_url
        url = dav_url + "/" + self.ws_title
        doc_url = url + "/" + "lockme"
        content = self._lipsum.getParagraph()

        self.delete(doc_url,
                    ok_codes=[204, 404],
                    description="Remove doc if exists")

        self.put(doc_url,
                 params=Data(None, content),
                 description="Create a doc",
                 ok_codes=[
                     201,
                 ])

        data = Data(
            'text/xml', """<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<lockinfo xmlns='DAV:'>
 <lockscope><exclusive/></lockscope>
<locktype><write/></locktype><owner>funkload test suite</owner>
</lockinfo>""")
        self.method("LOCK", doc_url, params=data, description="Lock")

        self.propfind(doc_url, ok_codes=[
            207,
        ], description="Get info")
        # nothing in the response tell that the doc is locked :/
        # print self.getBody()
        self.method("UNLOCK", doc_url, ok_codes=[
            204,
        ], description="Unlock")

        self.delete(doc_url, ok_codes=[
            204,
        ], description="Remove doc")

    def testCreateUpdate(self):
        self.initWorkspace()
        self.setBasicAuth(*self.cred_admin)
        dav_url = self.dav_url
        url = dav_url + "/" + self.ws_title

        folder_url = url + "/" + self._lipsum.getUniqWord()
        # create a folder
        self.method("MKCOL",
                    folder_url,
                    ok_codes=[
                        201,
                    ],
                    description="Create a folder")
        # create files
        for i in range(self.nb_docs):
            doc_url = folder_url + '/' + self._lipsum.getUniqWord() + '.txt'
            content = self._lipsum.getParagraph()
            self.put(doc_url,
                     params=Data(None, content),
                     description="Create a doc " + str(i),
                     ok_codes=[
                         201,
                     ])
            content += self._lipsum.getParagraph() + " UPDATE"
            self.put(doc_url,
                     params=Data(None, content),
                     description="Update doc " + str(i),
                     ok_codes=[
                         201,
                     ])
            #self.delete(doc_url, ok_codes=[204, ], description="Delete doc")
        self.clearBasicAuth()
Beispiel #15
0
class Rest(FunkLoadTestCase):
    ws_title = "FLNXTEST Rest workspace"
    dir_title = "FLNXTEST Rest folder"
    tag = "FLNXTEST"
    _lipsum = Lipsum()

    def setUp(self):
        self.server_url = self.conf_get('main', 'url')
        self.nb_doc = self.conf_getInt('testWriter', 'nb_doc')
        self.nb_read = self.conf_getInt('testReader', 'nb_read')
        self.credential_host = self.conf_get('credential', 'host')
        self.credential_port = self.conf_getInt('credential', 'port')
        self.cred_admin = xmlrpc_get_credential(self.credential_host,
                                                self.credential_port, 'admin')

    def FAIL_testUpload(self):
        r = RestAPI(self)
        r.login(*self.cred_admin)
        uid = '44f1af7e-5206-4f39-b935-55bb32ab3112'
        r.uploadFile(uid, 'foo.txt')

        r.logout()

    def testWriter(self):
        # Create a folder and few documents
        r = RestAPI(self)
        r.login(*self.cred_admin)
        root_uid = r.getRootWorkspaceUid()
        ws_uid = r.getChildUid(root_uid, self.ws_title, 'Workspace')
        if not ws_uid:
            ws_uid = r.createDocument(root_uid, 'Workspace', self.ws_title,
                                      'Test workspace description.')
        dir_uid = r.getChildUid(ws_uid, self.dir_title, 'Folder')
        if not dir_uid:
            dir_uid = r.createDocument(ws_uid, 'Folder', self.dir_title,
                                       'Test folder description')
        for i in range(self.nb_doc):
            title = self._lipsum.getSubject(uniq=True, prefix=self.tag)
            description = self.tag + ' ' + self._lipsum.getParagraph(1)
            uid = r.createDocument(dir_uid, 'File', title, description)
        r.logout()

    def testReader(self):
        # browse the workspace
        r = RestAPI(self)
        r.login(*self.cred_admin)
        uid = r.getRootWorkspaceUid()
        uid = r.getChildUid(uid, self.ws_title, 'Workspace')
        self.assert_(uid, 'Workspace "%s" not found.' % self.ws_title)
        uid = r.getChildUid(uid, self.dir_title, 'Folder')
        self.assert_(uid, 'Folder "%s" not found.' % self.dir_title)
        count = 0
        nb_read = self.nb_read
        for item in r.browse(uid):
            ret = r.exportTree(item.id)
            zc = ZipFile(StringIO(ret))
            self.assert_('.nuxeo-archive' in zc.namelist())
            count += 1
            if count > nb_read:
                break
        r.logout()
class Distribution(FunkLoadTestCase):
    """Nuxeo Courrier

    This test use a configuration file Distribution.conf.
    """
    _lipsum = Lipsum()

    def setUp(self):
        """Setting up test."""
        self.logd("setUp")
        self.addHeader('Accept-Language', 'en')
        self.server_url = self.conf_get('main', 'url')
        self.credential_host = self.conf_get('credential', 'host')
        self.credential_port = self.conf_getInt('credential', 'port')
        self.cred_admin = xmlrpc_get_credential(self.credential_host,
                                                self.credential_port, 'admin')
        self.cred_member = xmlrpc_get_credential(self.credential_host,
                                                 self.credential_port,
                                                 'members')

        self.senderList = xmlrpc_list_credentials(self.credential_host,
                                                  self.credential_port,
                                                  'writers')

        self.receiverList = xmlrpc_list_credentials(self.credential_host,
                                                    self.credential_port,
                                                    'readers')

    def getLastJsfState(self):
        return extractJsfState(self.getBody())

    def getRandReceiver(self):
        index = random.randint(0, len(self.receiverList) - 1)
        return self.receiverList[index]

    def getRandSender(self):
        index = random.randint(0, len(self.senderList) - 1)
        return self.senderList[index]

    def test_distribution(self):
        # The description should be set in the configuration file
        server_url = self.server_url
        # begin of test ---------------------------------------------
        lipsum = self._lipsum
        today = datetime.today().strftime('%m/%d/%y')
        randSender = self.getRandSender()
        receiver = self.getRandReceiver()

        self.post(server_url + "/nxstartup.faces",
                  params=[['user_name', randSender[0]],
                          ['user_password', randSender[1]],
                          ['requestedUrl', ''], ['form_submitted_marker', ''],
                          ['Submit', 'Connexion']],
                  description="Log in")
        self.assert_('You are logged as ' + randSender[0] in self.getBody())

        self.get(server_url + "/nxpath/default/correspondence/mailboxes/" +
                 randSender[0] + "@mailbox_view?tabId=&conversationId=0NXMAIN",
                 description="View personal mailbox")

        self.assert_('Create an incoming mail' in self.getBody())
        """Create incoming mail."""
        self.post(server_url + "/correspondence/mailbox/mailbox_view.faces",
                  params=[['j_id245', 'j_id245'],
                          ['javax.faces.ViewState',
                           self.getLastJsfState()],
                          ['j_id226:j_id227', 'j_id226:j_id227'],
                          ['j_id226_SUBMIT', '1']],
                  description="View mail form")

        self.assert_(
            'nxl_head_correspondence_incoming_document' in self.getBody())

        self.post(
            server_url +
            "/correspondence/mail/create_correspondence_document.faces",
            params=
            [[
                'AJAXREQUEST',
                'document_create:nxl_correspondence_document:nxw_contactsRecipients:nxw_contactsRecipients_region'
            ], ['document_create', 'document_create'],
             ['document_create:nxl_correspondence_document:nxw_title', ''],
             [
                 'document_create:nxl_correspondence_document:nxw_document_type',
                 '2'
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_sending_date',
                 ''
             ],
             [
                 'document_create_link_hidden_',
                 'document_create:nxl_correspondence_document:nxw_sending_date:trigger'
             ],
             [
                 'document_create_link_hidden_',
                 'document_create:nxl_correspondence_document:nxw_receive_date:trigger'
             ],
             [
                 'document_create_link_hidden_',
                 'document_create:nxl_correspondence_document:nxw_document_date:trigger'
             ],
             [
                 'document_create_link_hidden_',
                 'document_create:nxl_head_correspondence_incoming_document:nxw_scan_date:trigger'
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_receive_date',
                 ''
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_document_date',
                 ''
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_confidentiality',
                 '4'
             ], ['document_create:nxl_correspondence_document:nxw_origin', ''],
             ['document_create:nxl_correspondence_document:nxw_reference', ''],
             ['document_create:nxl_correspondence_document:nxw_body', ''],
             ['mce_editor_0_styleSelect', ''],
             ['mce_editor_0_formatSelect', ''],
             [
                 'document_create:nxl_head_correspondence_incoming_document:nxw_scan_site',
                 ''
             ],
             [
                 'document_create:nxl_head_correspondence_incoming_document:nxw_scan_date',
                 ''
             ],
             [
                 'document_create:nxl_file:nxw_file:nxw_file_file:choice',
                 'none'
             ], ['document_create:nxl_file:nxw_file:nxw_file_file:upload', ''],
             ['javax.faces.ViewState',
              self.getLastJsfState()], ['type', 'add'],
             [
                 'document_create:nxl_correspondence_document:nxw_contactsRecipients:nxw_contactsRecipients_add',
                 'document_create:nxl_correspondence_document:nxw_contactsRecipients:nxw_contactsRecipients_add'
             ], ['for', 'nxw_contactsRecipients_list']],
            description="Add recipient")

        self.post(
            server_url +
            "/correspondence/mail/create_correspondence_document.faces",
            params=
            [[
                'AJAXREQUEST',
                'document_create:nxl_correspondence_document:nxw_contactsSenders:nxw_contactsSenders_region'
            ], ['document_create', 'document_create'],
             ['document_create:nxl_correspondence_document:nxw_title', ''],
             [
                 'document_create:nxl_correspondence_document:nxw_document_type',
                 '2'
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_contactsRecipients:nxw_contactsRecipients_list:0:nxw_contactsRecipients_name',
                 ''
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_contactsRecipients:nxw_contactsRecipients_list:0:nxw_contactsRecipients_surname',
                 ''
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_contactsRecipients:nxw_contactsRecipients_list:0:nxw_contactsRecipients_service',
                 ''
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_sending_date',
                 ''
             ],
             [
                 'document_create_link_hidden_',
                 'document_create:nxl_correspondence_document:nxw_sending_date:trigger'
             ],
             [
                 'document_create_link_hidden_',
                 'document_create:nxl_correspondence_document:nxw_receive_date:trigger'
             ],
             [
                 'document_create_link_hidden_',
                 'document_create:nxl_correspondence_document:nxw_document_date:trigger'
             ],
             [
                 'document_create_link_hidden_',
                 'document_create:nxl_head_correspondence_incoming_document:nxw_scan_date:trigger'
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_receive_date',
                 ''
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_document_date',
                 ''
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_confidentiality',
                 '4'
             ], ['document_create:nxl_correspondence_document:nxw_origin', ''],
             ['document_create:nxl_correspondence_document:nxw_reference', ''],
             ['document_create:nxl_correspondence_document:nxw_body', ''],
             ['mce_editor_0_styleSelect', ''],
             ['mce_editor_0_formatSelect', ''],
             [
                 'document_create:nxl_head_correspondence_incoming_document:nxw_scan_site',
                 ''
             ],
             [
                 'document_create:nxl_head_correspondence_incoming_document:nxw_scan_date',
                 ''
             ],
             [
                 'document_create:nxl_file:nxw_file:nxw_file_file:choice',
                 'none'
             ], ['document_create:nxl_file:nxw_file:nxw_file_file:upload', ''],
             ['javax.faces.ViewState',
              self.getLastJsfState()],
             [
                 'document_create:nxl_correspondence_document:nxw_contactsSenders:nxw_contactsSenders_add',
                 'document_create:nxl_correspondence_document:nxw_contactsSenders:nxw_contactsSenders_add'
             ], ['type', 'add'], ['for', 'nxw_contactsSenders_list']],
            description="Add sender")

        self.post(
            server_url +
            "/correspondence/mail/create_correspondence_document.faces",
            params=
            [['document_create', 'document_create'],
             [
                 'document_create:nxl_correspondence_document:nxw_title',
                 lipsum.getSubject()
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_document_type',
                 '2'
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_contactsRecipients:nxw_contactsRecipients_list:0:nxw_contactsRecipients_name',
                 lipsum.getWord()
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_contactsRecipients:nxw_contactsRecipients_list:0:nxw_contactsRecipients_surname',
                 lipsum.getWord()
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_contactsRecipients:nxw_contactsRecipients_list:0:nxw_contactsRecipients_service',
                 lipsum.getWord()
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_sending_date',
                 today + ' 1:00 PM'
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_receive_date',
                 today + ' 2:00 PM'
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_document_date',
                 today + ' 11:00 AM'
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_confidentiality',
                 '4'
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_contactsSenders:nxw_contactsSenders_list:0:nxw_contactsSenders_name',
                 lipsum.getWord()
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_contactsSenders:nxw_contactsSenders_list:0:nxw_contactsSenders_surname',
                 lipsum.getWord()
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_contactsSenders:nxw_contactsSenders_list:0:nxw_contactsSenders_service',
                 lipsum.getWord()
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_origin',
                 lipsum.getAddress()
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_reference',
                 lipsum.getUniqWord()
             ],
             [
                 'document_create:nxl_correspondence_document:nxw_body',
                 lipsum.getParagraph()
             ],
             [
                 'document_create:nxl_head_correspondence_incoming_document:nxw_scan_site',
                 'nuxeo'
             ],
             [
                 'document_create:nxl_head_correspondence_incoming_document:nxw_scan_date',
                 today + ' 10:00 AM'
             ],
             [
                 'document_create:nxl_file:nxw_file:nxw_file_file:choice',
                 'upload'
             ], ['document_create_SUBMIT', '1'],
             [
                 'document_create:nxl_file:nxw_file:nxw_file_file:upload',
                 Upload("hello.pdf")
             ], ['document_create:j_id365', 'Create'],
             ['javax.faces.ViewState',
              self.getLastJsfState()]],
            description="Submit new mail")

        self.assert_('Incoming mail saved' in self.getBody())

        self.post(server_url +
                  "/correspondence/mail/view_correspondence_envelope.faces",
                  params=[['javax.faces.ViewState',
                           self.getLastJsfState()], ['j_id340_SUBMIT', '1'],
                          [
                              'j_id340:j_id341:j_id342:0:j_id343',
                              'j_id340:j_id341:j_id342:0:j_id343'
                          ]],
                  description="View distribution form")
        self.assert_('distribution_recipients' in self.getBody())

        self.post(
            server_url +
            "/correspondence/mail/distribution_correspondence_envelope.faces",
            params=
            [[
                'AJAXREQUEST',
                'distribution_recipients:nxl_correspondence_recipients:j_id328'
            ], ['distribution_recipients', 'distribution_recipients'],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_action_recipients_suggest',
                 receiver[0]
             ],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_action_recipients_suggestionBox_selection',
                 ''
             ],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_copy_recipients_suggest',
                 ''
             ],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_copy_recipients_suggestionBox_selection',
                 ''
             ], ['distribution_recipients:comment', ''],
             ['javax.faces.ViewState',
              self.getLastJsfState()],
             [
                 'ajaxSingle',
                 'distribution_recipients:nxl_correspondence_recipients:nxw_action_recipients_suggestionBox'
             ], ['mailboxSuggestionSearchType', ''],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_action_recipients_suggestionBox',
                 'distribution_recipients:nxl_correspondence_recipients:nxw_action_recipients_suggestionBox'
             ], ['inputvalue', receiver[0]], ['AJAX:EVENTS_COUNT', '1']],
            description="Search receiver")

        self.assert_(receiver[0] in self.getBody())

        self.post(
            server_url +
            "/correspondence/mail/distribution_correspondence_envelope.faces",
            params=
            [[
                'AJAXREQUEST',
                'distribution_recipients:nxl_correspondence_recipients:j_id328'
            ], ['distribution_recipients', 'distribution_recipients'],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_action_recipients_suggest',
                 ''
             ],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_action_recipients_suggestionBox_selection',
                 '0'
             ],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_copy_recipients_suggest',
                 ''
             ],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_copy_recipients_suggestionBox_selection',
                 ''
             ], ['distribution_recipients:comment', ''],
             ['javax.faces.ViewState',
              self.getLastJsfState()],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_action_recipients_suggestionBox:j_id335',
                 'distribution_recipients:nxl_correspondence_recipients:nxw_action_recipients_suggestionBox:j_id335'
             ], ['suggestionSelectionListId', 'nxw_action_recipients_list']],
            description="Select receiver")

        self.post(
            server_url +
            "/correspondence/mail/distribution_correspondence_envelope.faces",
            params=
            [['distribution_recipients', 'distribution_recipients'],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_action_recipients_suggest',
                 ''
             ],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_action_recipients_suggestionBox_selection',
                 ''
             ],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_copy_recipients_suggest',
                 ''
             ],
             [
                 'distribution_recipients:nxl_correspondence_recipients:nxw_copy_recipients_suggestionBox_selection',
                 ''
             ], ['distribution_recipients:comment',
                 lipsum.getSentence()],
             ['distribution_recipients:j_id389', 'Send'],
             ['distribution_recipients_SUBMIT', '1'],
             ['javax.faces.ViewState',
              self.getLastJsfState()]],
            description="Send mail")

        self.assert_('The distribution is done' in self.getBody())

        self.get(server_url + "/logout", description="Log out")

        # end of test -----------------------------------------------

    def tearDown(self):
        """Setting up test."""
        self.logd("tearDown.\n")
Beispiel #17
0
class CMF(NuxeoTestCase):
    """CMF

    This test use a configuration file CMF.conf.
    """
    _lipsum = Lipsum()

    def setUp(self):
        """Setting up test."""
        self.logd("setUp")
        NuxeoTestCase.setUp(self)
        self.memberList = xmlrpc_list_credentials(self.credential_host,
                                                  self.credential_port,
                                                  'members')
        self.routeManagerList = xmlrpc_list_credentials(
            self.credential_host, self.credential_port, 'routeManagers')
        f = open('./xml_importer/pdf-list.txt', 'r')
        self.pdf_files = f.readlines()
        self.routeName = "FunkloadRouteDoc"
        self.routeModelId = self.extractRouteModelId("jdoe", "jdoe1",
                                                     self.routeName)

    def executeApproveLinkOperation(self, user, passwd, mailboxId, caseId):
        self.logi("Execute approve op as: " + user)
        URL = "http://localhost:8080/nuxeo/site/automation/"
        self.setBasicAuth(user, passwd)
        data = Data(
            'application/json+nxrequest',
            '{"params":{},"context":{},"input":"docs:' + mailboxId + ',' +
            caseId + '"}')
        self.post(URL + 'Case.Management.Approve.CaseLink', data)
        self.clearBasicAuth()

    def getRandomUser(self):
        return random.choice(self.memberList)

    def getRandomAdministrator(self):
        return random.choice(self.cred_admin)

    def getRandomRouteManager(self):
        return random.choice(self.routeManagerList)

    def getPasswordForUser(self, user):
        for i in self.memberList:
            if cmp(i[0], user):
                return i[1]

    def extractRouteStepsIds(self, user, passwd, routeInstanceName):
        stepsDocIds = []
        p = RouteInstancePage(self).login(
            user, passwd).viewRouteInstance(routeInstanceName)
        #get all the route steps docIds to modify the route from the route view
        stepsDocIds = p.getStepsDocsIds(stepsDocIds)
        p.logout()
        return stepsDocIds

    def updateRoute(self, user, passwd, case, route, stepsDocIds):
        #lock route and modify steps
        routeInstance = CaseItemPage(self).login(
            user, passwd).viewRelatedStartedRoute(case)
        p = RoutePage(self).lockRoute(user, route)
        self.logi("Route " + routeInstance + " locked by " + user)
        j = 0
        usersWithTasks = []
        for i in stepsDocIds:
            randUser = self.getRandomUser()
            if RoutePage(self).stepCanBeUpdated(i, routeInstance,
                                                user) is True:
                if RoutePage(self).stepNeedsToBeApproved(
                        i, routeInstance, user) is True:
                    usersWithTasks.append(randUser)
                #TODO delete this refresh call after fixing NXCM-301
                CaseItemPage(self).refreshRelatedStartedRoute(case)
                RoutePage(self).updateStepDistributionMailboxFromRouteView(
                    i, "user-" + randUser[0], j)
            j = j + 1
        p.logout()
        return usersWithTasks
Beispiel #18
0
class Pages(NuxeoTestCase):
    ws_title = "FLNXTEST Page workspace"
    dir_title = "FLNXTEST Page folder"
    tag = "FLNXTEST"
    _lipsum = Lipsum()

    def testAvailable(self):
        BasePage(self).available()

    def testLoginPage(self):
        (LoginPage(self).view().login(*self.cred_admin).logout())
        LoginPage(self).loginInvalid('foo', 'bar')

    def testBasePageViewDocumentPath(self):
        # fluent test
        p = (LoginPage(self).login(
            *self.cred_admin).getRootWorkspaces().logout())

        p = (LoginPage(self).login(
            *self.cred_admin).viewDocumentPath("workspaces"))
        # TODO assert we are on workspaces
        ret = p.viewDocumentPath("workspaces/that/does/not/exists",
                                 raiseOn404=False)
        self.assert_(ret is None, "Expecting None for a 404.")
        p.logout()

    def testNavigation(self):
        p = (LoginPage(self).login(*self.cred_admin).getRootWorkspaces())
        p = (p.rights().manage())
        p = (
            p.getRootWorkspaces().personalWorkspace().getRootWorkspaces()
            #XXX NXP-15036 Update search method with search tab
            #.search('workspaces')
            .logout())

    def testSections(self):
        title = self._lipsum.getSubject(uniq=True, prefix=self.tag)
        description = self.tag + ' ' + self._lipsum.getParagraph(1)
        p = (LoginPage(self).login(
            *self.cred_admin).getRootSections().createSection(
                title, description))
        p = (p.getRootSections().deleteItem(title, "Section").logout())

    def dbgtestPublish(self):
        p = LoginPage(self).login(*self.cred_admin)
        p.viewDocumentPath(
            'workspaces/flnxtest-page-workspace/flnxtest-page-folder/flnxtest-tsoc1g7-tris'
        )
        p.publish().publishOnFirstSection()
        p.logout()

    def testPublish(self):
        title = self._lipsum.getSubject(uniq=True, prefix=self.tag)
        description = self.tag + ' ' + self._lipsum.getParagraph(1)
        title_section = self._lipsum.getSubject(uniq=True, prefix=self.tag)

        p = (LoginPage(self).login(
            *self.cred_admin).getRootSections().createSection(
                title_section,
                description).rights().grant('ReadWrite',
                                            'Members group').view())
        p = (LoginPage(self).login(
            *self.cred_admin).getRootWorkspaces().createWorkspace(
                self.ws_title, 'A description').view().createFolder(
                    self.dir_title,
                    'A description').createFile(title, description))
        p = (p.publish().publishOnFirstSection())
        p = (p.getRootWorkspaces().deleteItem(
            self.ws_title).getRootSections().deleteItem(
                title_section, "Section"))
        p.logout()

    def testFolderPage(self):
        title = self._lipsum.getSubject(uniq=True, prefix=self.tag)
        description = self.tag + ' ' + self._lipsum.getParagraph(1)
        p = (LoginPage(self).login(
            *self.cred_admin).getRootWorkspaces().createWorkspace(
                self.ws_title, 'A description').rights().grant(
                    'ReadWrite', 'Members group').view().createFolder(
                        self.dir_title, 'A description'))
        fuid = p.getDocUid()
        p.createFile(title, description)
        p = (p.viewDocumentUid(fuid).sort('author').sort('title').sort(
            'lifecycle').sort('date'))
        p = (p.getRootWorkspaces().deleteItem(self.ws_title).logout())

    def testFileTabs(self):
        title = self._lipsum.getSubject(uniq=True, prefix=self.tag)
        description = self.tag + ' ' + self._lipsum.getParagraph(1)
        p = (LoginPage(self).login(
            *self.cred_admin).getRootWorkspaces().createWorkspace(
                self.ws_title, 'A description').view().createFolder(
                    self.dir_title,
                    'A description').createFile(title, description))
        p = (p.edit().files().publish().relations().comments().history())
        p = (p.getRootWorkspaces().deleteItem(self.ws_title).logout())

    def testUsersGroupsPage(self):
        p = LoginPage(self).login(*self.cred_admin)
        login = self.tag.lower()
        pwd = 'secret'
        p = (p.adminCenter().usersAndGroupsPage().createUser(
            login,
            '*****@*****.**',
            pwd,
            groups='members',
            firstname="first",
            lastname=login.capitalize()).createUser(login,
                                                    '*****@*****.**',
                                                    pwd,
                                                    groups='members',
                                                    firstname='first',
                                                    lastname='last'))
        p.exitAdminCenter().logout()
        p.login(login, pwd).getRootWorkspaces().logout()
Beispiel #19
0
import unittest
from funkload.Lipsum import Lipsum
from funkload.FunkLoadTestCase import FunkLoadTestCase
from webunit.utility import Upload
from funkload.utils import Data
import hashlib
from funkload.utils import extract_token

#from funkload.utils import xmlrpc_get_credential


def user_grade_dir_name(username):
    return hashlib.md5(username).hexdigest()[0:5] + username


lipsum = Lipsum()


class Navigation(FunkLoadTestCase):
    """XXX

    This test use a configuration file Navigation.conf.
    """
    def setUp(self):
        """Setting up test."""
        self.logd("setUp")
        self.server_url = self.conf_get('main', 'url')
        # XXX here you can setup the credential access like this
        # credential_host = self.conf_get('credential', 'host')
        # credential_port = self.conf_getInt('credential', 'port')
        # self.login, self.password = xmlrpc_get_credential(credential_host,