Search in sources :

Example 6 with CookieManager

use of org.apache.jmeter.protocol.http.control.CookieManager in project jmeter by apache.

the class HTTPSamplerBase method downloadPageResources.

/**
     * Download the resources of an HTML page.
     *
     * @param pRes
     *            result of the initial request - must contain an HTML response
     * @param container
     *            for storing the results, if any
     * @param frameDepth
     *            Depth of this target in the frame structure. Used only to
     *            prevent infinite recursion.
     * @return res if no resources exist, otherwise the "Container" result with one subsample per request issued
     */
protected HTTPSampleResult downloadPageResources(final HTTPSampleResult pRes, final HTTPSampleResult container, final int frameDepth) {
    HTTPSampleResult res = pRes;
    Iterator<URL> urls = null;
    try {
        final byte[] responseData = res.getResponseData();
        if (responseData.length > 0) {
            // Bug 39205
            final LinkExtractorParser parser = getParser(res);
            if (parser != null) {
                String userAgent = getUserAgent(res);
                urls = parser.getEmbeddedResourceURLs(userAgent, responseData, res.getURL(), res.getDataEncodingWithDefault());
            }
        }
    } catch (LinkExtractorParseException e) {
        // Don't break the world just because this failed:
        res.addSubResult(errorResult(e, new HTTPSampleResult(res)));
        setParentSampleSuccess(res, false);
    }
    HTTPSampleResult lContainer = container;
    // Iterate through the URLs and download each image:
    if (urls != null && urls.hasNext()) {
        if (lContainer == null) {
            lContainer = new HTTPSampleResult(res);
            lContainer.addRawSubResult(res);
        }
        res = lContainer;
        // Get the URL matcher
        String re = getEmbeddedUrlRE();
        Perl5Matcher localMatcher = null;
        Pattern pattern = null;
        if (re.length() > 0) {
            try {
                pattern = JMeterUtils.getPattern(re);
                // don't fetch unless pattern compiles
                localMatcher = JMeterUtils.getMatcher();
            } catch (MalformedCachePatternException e) {
                // NOSONAR
                log.warn("Ignoring embedded URL match string: " + e.getMessage());
            }
        }
        // For concurrent get resources
        final List<Callable<AsynSamplerResultHolder>> list = new ArrayList<>();
        // init with default value
        int maxConcurrentDownloads = CONCURRENT_POOL_SIZE;
        boolean isConcurrentDwn = isConcurrentDwn();
        if (isConcurrentDwn) {
            try {
                maxConcurrentDownloads = Integer.parseInt(getConcurrentPool());
            } catch (NumberFormatException nfe) {
                log.warn(// $NON-NLS-1$
                "Concurrent download resources selected, " + // $NON-NLS-1$
                "but pool size value is bad. Use default value");
            }
            // no need to use another thread, do the sample on the current thread
            if (maxConcurrentDownloads == 1) {
                log.warn("Number of parallel downloads set to 1, (sampler name=" + getName() + ")");
                isConcurrentDwn = false;
            }
        }
        while (urls.hasNext()) {
            // See catch clause below
            Object binURL = urls.next();
            try {
                URL url = (URL) binURL;
                if (url == null) {
                    log.warn("Null URL detected (should not happen)");
                } else {
                    try {
                        url = escapeIllegalURLCharacters(url);
                    } catch (Exception e) {
                        // NOSONAR
                        res.addSubResult(errorResult(new Exception(url.toString() + " is not a correct URI", e), new HTTPSampleResult(res)));
                        setParentSampleSuccess(res, false);
                        continue;
                    }
                    // I don't think localMatcher can be null here, but check just in case
                    if (pattern != null && localMatcher != null && !localMatcher.matches(url.toString(), pattern)) {
                        // we have a pattern and the URL does not match, so skip it
                        continue;
                    }
                    try {
                        url = url.toURI().normalize().toURL();
                    } catch (MalformedURLException | URISyntaxException e) {
                        res.addSubResult(errorResult(new Exception(url.toString() + " URI can not be normalized", e), new HTTPSampleResult(res)));
                        setParentSampleSuccess(res, false);
                        continue;
                    }
                    if (isConcurrentDwn) {
                        // if concurrent download emb. resources, add to a list for async gets later
                        list.add(new ASyncSample(url, HTTPConstants.GET, false, frameDepth + 1, getCookieManager(), this));
                    } else {
                        // default: serial download embedded resources
                        HTTPSampleResult binRes = sample(url, HTTPConstants.GET, false, frameDepth + 1);
                        res.addSubResult(binRes);
                        setParentSampleSuccess(res, res.isSuccessful() && (binRes == null || binRes.isSuccessful()));
                    }
                }
            } catch (ClassCastException e) {
                // NOSONAR
                res.addSubResult(errorResult(new Exception(binURL + " is not a correct URI", e), new HTTPSampleResult(res)));
                setParentSampleSuccess(res, false);
            }
        }
        // IF for download concurrent embedded resources
        if (isConcurrentDwn && !list.isEmpty()) {
            ResourcesDownloader resourcesDownloader = ResourcesDownloader.getInstance();
            try {
                // sample all resources
                final List<Future<AsynSamplerResultHolder>> retExec = resourcesDownloader.invokeAllAndAwaitTermination(maxConcurrentDownloads, list);
                CookieManager cookieManager = getCookieManager();
                // add result to main sampleResult
                for (Future<AsynSamplerResultHolder> future : retExec) {
                    // this call will not block as the futures return by invokeAllAndAwaitTermination
                    //   are either done or cancelled
                    AsynSamplerResultHolder binRes = future.get();
                    if (cookieManager != null) {
                        CollectionProperty cookies = binRes.getCookies();
                        for (JMeterProperty jMeterProperty : cookies) {
                            Cookie cookie = (Cookie) jMeterProperty.getObjectValue();
                            cookieManager.add(cookie);
                        }
                    }
                    res.addSubResult(binRes.getResult());
                    setParentSampleSuccess(res, res.isSuccessful() && (binRes.getResult() != null ? binRes.getResult().isSuccessful() : true));
                }
            } catch (InterruptedException ie) {
                // $NON-NLS-1$
                log.warn("Interrupted fetching embedded resources", ie);
                Thread.currentThread().interrupt();
            } catch (ExecutionException ee) {
                // $NON-NLS-1$
                log.warn("Execution issue when fetching embedded resources", ee);
            }
        }
    }
    return res;
}
Also used : MalformedURLException(java.net.MalformedURLException) JMeterProperty(org.apache.jmeter.testelement.property.JMeterProperty) ArrayList(java.util.ArrayList) Perl5Matcher(org.apache.oro.text.regex.Perl5Matcher) URISyntaxException(java.net.URISyntaxException) URL(java.net.URL) Callable(java.util.concurrent.Callable) LinkExtractorParser(org.apache.jmeter.protocol.http.parser.LinkExtractorParser) ExecutionException(java.util.concurrent.ExecutionException) AsynSamplerResultHolder(org.apache.jmeter.protocol.http.sampler.ResourcesDownloader.AsynSamplerResultHolder) LinkExtractorParseException(org.apache.jmeter.protocol.http.parser.LinkExtractorParseException) CookieManager(org.apache.jmeter.protocol.http.control.CookieManager) Cookie(org.apache.jmeter.protocol.http.control.Cookie) Pattern(org.apache.oro.text.regex.Pattern) CollectionProperty(org.apache.jmeter.testelement.property.CollectionProperty) MalformedCachePatternException(org.apache.oro.text.MalformedCachePatternException) URISyntaxException(java.net.URISyntaxException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) MalformedCachePatternException(org.apache.oro.text.MalformedCachePatternException) MalformedURLException(java.net.MalformedURLException) LinkExtractorParseException(org.apache.jmeter.protocol.http.parser.LinkExtractorParseException) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) Future(java.util.concurrent.Future)

Example 7 with CookieManager

use of org.apache.jmeter.protocol.http.control.CookieManager in project jmeter by apache.

the class AccessLogSampler method sampleWithParser.

/**
     * sample gets a new HTTPSampler from the generator and calls it's sample()
     * method.
     *
     * @return newly generated and called sample
     */
public SampleResult sampleWithParser() {
    initFilter();
    instantiateParser();
    SampleResult res = null;
    try {
        if (parser == null) {
            throw new JMeterException("No Parser available");
        }
        // we call parse with 1 to get only one.
        // this also means if we change the implementation
        // to use 2, it would use every other entry and
        // so on. Not that it is really useful, but a
        // person could use it that way if they have a
        // huge gigabyte log file and they only want to
        // use a quarter of the entries.
        int thisCount = parser.parseAndConfigure(1, this);
        if (// Was there an error?
        thisCount < 0) {
            return errorResult(new Error("Problem parsing the log file"), new HTTPSampleResult());
        }
        if (thisCount == 0) {
            if (count == 0 || filter == null) {
                log.info("Stopping current thread");
                JMeterContextService.getContext().getThread().stop();
            }
            if (filter != null) {
                filter.reset();
            }
            CookieManager cm = getCookieManager();
            if (cm != null) {
                cm.clear();
            }
            count = 0;
            return errorResult(new Error("No entries found"), new HTTPSampleResult());
        }
        count = thisCount;
        res = sample();
        if (res != null) {
            res.setSampleLabel(toString());
        }
    } catch (Exception e) {
        log.warn("Sampling failure", e);
        return errorResult(e, new HTTPSampleResult());
    }
    return res;
}
Also used : JMeterException(org.apache.jorphan.util.JMeterException) SampleResult(org.apache.jmeter.samplers.SampleResult) CookieManager(org.apache.jmeter.protocol.http.control.CookieManager) JMeterException(org.apache.jorphan.util.JMeterException)

Example 8 with CookieManager

use of org.apache.jmeter.protocol.http.control.CookieManager in project jmeter by apache.

the class SessionFilter method isFiltered.

/**
     * {@inheritDoc}
     */
@Override
public boolean isFiltered(String path, TestElement sampler) {
    String ipAddr = getIpAddress(path);
    CookieManager cm = getCookieManager(ipAddr);
    ((HTTPSampler) sampler).setCookieManager(cm);
    return false;
}
Also used : HTTPSampler(org.apache.jmeter.protocol.http.sampler.HTTPSampler) CookieManager(org.apache.jmeter.protocol.http.control.CookieManager)

Example 9 with CookieManager

use of org.apache.jmeter.protocol.http.control.CookieManager in project jmeter by apache.

the class TestSessionFilter method testGetCookieManagerLastUse.

@Test
public void testGetCookieManagerLastUse() {
    SessionFilter orig = new SessionFilter();
    SessionFilter clone = (SessionFilter) orig.clone();
    final String ipAddr = "1.2.3.4";
    CookieManager cmOrig = orig.getCookieManager(ipAddr);
    @SuppressWarnings("unused") CookieManager // should set cmOrig free
    secondCm = orig.getCookieManager("2.2.2.2");
    CookieManager cmClone = clone.getCookieManager(ipAddr);
    // clear CookieManager in clone
    orig.threadFinished();
    // clear CookieManager in clone
    clone.threadFinished();
    assertSame(cmOrig, cmClone);
}
Also used : CookieManager(org.apache.jmeter.protocol.http.control.CookieManager) Test(org.junit.Test)

Example 10 with CookieManager

use of org.apache.jmeter.protocol.http.control.CookieManager in project jmeter by apache.

the class HTTPSamplerBase method setCookieManager.

public void setCookieManager(CookieManager value) {
    CookieManager mgr = getCookieManager();
    if (mgr != null) {
        if (log.isWarnEnabled()) {
            log.warn("Existing CookieManager {} superseded by {}", mgr.getName(), value.getName());
        }
    }
    setCookieManagerProperty(value);
}
Also used : CookieManager(org.apache.jmeter.protocol.http.control.CookieManager)

Aggregations

CookieManager (org.apache.jmeter.protocol.http.control.CookieManager)13 Test (org.junit.Test)3 IOException (java.io.IOException)2 Cookie (org.apache.jmeter.protocol.http.control.Cookie)2 HTTPSampler (org.apache.jmeter.protocol.http.sampler.HTTPSampler)2 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1 MalformedURLException (java.net.MalformedURLException)1 URISyntaxException (java.net.URISyntaxException)1 URL (java.net.URL)1 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)1 ArrayList (java.util.ArrayList)1 Callable (java.util.concurrent.Callable)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 ExecutionException (java.util.concurrent.ExecutionException)1 Future (java.util.concurrent.Future)1 JFileChooser (javax.swing.JFileChooser)1 AuthManager (org.apache.jmeter.protocol.http.control.AuthManager)1 HeaderManager (org.apache.jmeter.protocol.http.control.HeaderManager)1 LinkExtractorParseException (org.apache.jmeter.protocol.http.parser.LinkExtractorParseException)1 LinkExtractorParser (org.apache.jmeter.protocol.http.parser.LinkExtractorParser)1