Package org.auraframework.test.perf.rdp

Source Code of org.auraframework.test.perf.rdp.RDPAnalyzerTest

/*
* Copyright (C) 2013 salesforce.com, inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*         http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.auraframework.test.perf.rdp;

import java.util.List;
import java.util.Map;

import org.auraframework.test.annotation.UnAdaptableTest;
import org.auraframework.test.perf.core.AbstractPerfTestCase;
import org.auraframework.test.perf.metrics.PerfMetric;
import org.auraframework.test.perf.metrics.PerfMetricsCollector;
import org.json.JSONArray;
import org.json.JSONObject;

import com.google.common.collect.Lists;

public final class RDPAnalyzerTest extends AbstractPerfTestCase {

    public RDPAnalyzerTest(String name) {
        super(name);
    }

    @Override
    protected boolean runPerfWarmupRun() {
        return true;
    }

    @Override
    protected int numPerfTimelineRuns() {
        return 0; // run only the first warmup run
    }

    @Override
    protected int numPerfAuraRuns() {
        return 0; // run only the first warmup run
    }

    @Override
    protected int numPerfProfileRuns() {
        return 0; // run only the first warmup run
    }

    // TODO: remove @UnAdaptableTest once we also use SauceLabs for perf tests in autobuild
    @UnAdaptableTest
    public void testProtocol() throws Exception {
        // run WebDriver test
        openTotallyRaw("/ui/label.cmp?label=foo");

        // UC: verify raw protocol notifications:
        List<RDPNotification> notifications = getRDPNotifications();
        // checks has expected events:
        assertTrue(RDP.Timeline.eventRecorded + " not found",
                RDPUtil.containsMethod(notifications, RDP.Timeline.eventRecorded));
        assertTrue(RDP.Network.loadingFinished + " not found",
                RDPUtil.containsMethod(notifications, RDP.Network.loadingFinished));
        assertTrue(RDP.Page.domContentEventFired + " not found",
                RDPUtil.containsMethod(notifications, RDP.Page.domContentEventFired));
        assertTrue(RDP.Page.loadEventFired + " not found",
                RDPUtil.containsMethod(notifications, RDP.Page.loadEventFired));

        // UC: extract/verify Network metrics
        RDPAnalyzer analyzer = new RDPAnalyzer(notifications, getPerfStartMarker(), getPerfEndMarker());
        List<PerfMetric> networkMetrics = analyzer.analyzeNetworkDomain();
        // check requestsMetric
        PerfMetric requestsMetric = networkMetrics.get(0);
        assertEquals("Network.numRequests", requestsMetric.getName());
        int numRequests = requestsMetric.getIntValue();
        assertTrue("numRequests: " + numRequests, numRequests >= 6);
        // check bytes metric
        PerfMetric bytesMetric = networkMetrics.get(1);
        assertEquals("Network.encodedDataLength", bytesMetric.getName());
        assertEquals("bytes", bytesMetric.getUnits());
        assertTrue("bytes: " + bytesMetric.getIntValue() + ": " + bytesMetric.toString(), bytesMetric.getIntValue() > 0);
        JSONArray requests = bytesMetric.getDetails();
        assertTrue("num requests: " + requests.length(), requests.length() == numRequests);

        // UC: extract/verify Timeline event metrics
        Map<String, TimelineEventStats> timelineEventsStats = analyzer.analyzeTimelineDomain();
        TimelineEventStats paintStats = timelineEventsStats.get("Paint");
        assertTrue("num paints: " + paintStats.getCount(), paintStats.getCount() >= 1);

        // UC: getTimeline() gets info from last getTimeline() call
        // we shouldn't get any more events in the timeline at this point
        assertEquals(0, getRDPNotifications().size());
    }

    /**
     * Checks the timeline has the marks we are adding
     */
    public void testTimelineMarks() throws Exception {
        runWithPerfApp(getDefDescriptor("ui:button"));

        List<RDPNotification> notifications = getRDPNotifications();
        RDPAnalyzer analyzer = new RDPAnalyzer(notifications, getPerfStartMarker(), getPerfEndMarker());

        // UC: check start and end mark are at beginning/end of filtered timeline
        List<JSONObject> filteredTimeline = analyzer.getFilteredFlattenedTimelineEvents();
        int filteredSize = filteredTimeline.size();
        JSONObject firstEntry = filteredTimeline.get(0);
        JSONObject lastEntry = filteredTimeline.get(filteredSize - 1);
        assertTrue(firstEntry.toString(),
                TimelineEventUtil.containsTimelineTimeStamp(firstEntry, getPerfStartMarker()));
        assertTrue(lastEntry.toString(),
                TimelineEventUtil.containsTimelineTimeStamp(lastEntry, getPerfEndMarker()));

        // UC: check the marks exists and in the right order
        List<String> marks = Lists.newArrayList();
        for (JSONObject timelineEvent : analyzer.getFilteredFlattenedTimelineEvents()) {
            String mark = TimelineEventUtil.isTimelineTimeStamp(timelineEvent);
            if (mark != null) {
                marks.add(mark);
            }
        }
        assertEquals("[PERF:start, START:cmpCreate, END:cmpCreate, START:cmpRender, END:cmpRender, PERF:end]",
                marks.toString());
    }

    public void testGetDevToolsLog() throws Exception {
        PerfMetricsCollector metricsCollector = new PerfMetricsCollector(this, PerfRunMode.TIMELINE);
        metricsCollector.startCollecting();
        runWithPerfApp(getDefDescriptor("ui:button"));
        metricsCollector.stopCollecting();
        RDPAnalyzer analyzer = metricsCollector.getRDPAnalyzer();

        // UC: whole dev tools log
        List<JSONObject> fulDevToolsLog = analyzer.getDevToolsLog();
        int fullSize = fulDevToolsLog.size();
        assertTrue("dev tools log size: " + fullSize, fulDevToolsLog.size() > 10);

        // UC: dev tools log between marks
        List<JSONObject> trimmedDevToolsLog = analyzer.getFilteredDevToolsLog();
        int trimmedSize = trimmedDevToolsLog.size();
        assertTrue("full " + fullSize + ", trimmed " + trimmedSize, trimmedSize < fullSize);
        JSONObject firstEntry = trimmedDevToolsLog.get(0);
        JSONObject lastEntry = trimmedDevToolsLog.get(trimmedSize - 1);
        assertTrue(firstEntry.toString(),
                TimelineEventUtil.containsTimelineTimeStamp(firstEntry, getPerfStartMarker()));
        assertTrue(lastEntry.toString(),
                TimelineEventUtil.containsTimelineTimeStamp(lastEntry, getPerfEndMarker()));
    }
}
TOP

Related Classes of org.auraframework.test.perf.rdp.RDPAnalyzerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.