<!DOCTYPE html>
<!--
Copyright (c) 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->

<link rel="import" href="/core/test_utils.html">
<link rel="import" href="/extras/importer/etw/etw_importer.html">
<link rel="import" href="/extras/importer/etw/eventtrace_parser.html">

<script>
'use strict';

tr.b.unittest.testSuite(function() { // @suppress longLineCheck
  // Constants for EventTrace events.
  var guid = '68FDD900-4A3E-11D1-84F4-0000F80464E3';
  var kEventTraceHeaderOpcode = 0;

  var kEventTraceHeaderPayload32bitV2 =
      'AAABAAYBAQWwHQAAEAAAABEs1WHICMwBYWECAGQAAAABAAAAAwAAAAEAAAAEAAAAAAAAA' +
      'FoJAAAFAAAABgAAACwBAABAAHQAegByAGUAcwAuAGQAbABsACwALQAxADEAMgAAAAAAAA' +
      'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAQACAAAAAAAAAAAAAABAAHQ' +
      'AegByAGUAcwAuAGQAbABsACwALQAxADEAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
      'AAAAAAAAAAAAAAADAAAAAgACAAAAAAAAAMT///8AAAAAf0Ob368FzAGdrCMAAAAAACw0o' +
      '2DICMwBAQAAAAAAAABNAGEAawBlACAAVABlAHMAdAAgAEQAYQB0AGEAIABTAGUAcwBzAG' +
      'kAbwBuAAAAYwA6AFwAcwByAGMAXABzAGEAdwBiAHUAYwBrAFwAdAByAHUAbgBrAFwAcwB' +
      'yAGMAXABzAGEAdwBiAHUAYwBrAFwAbABvAGcAXwBsAGkAYgBcAHQAZQBzAHQAXwBkAGEA' +
      'dABhAFwAaQBtAGEAZwBlAF8AZABhAHQAYQBfADMAMgBfAHYAMAAuAGUAdABsAAAA';

  var kEventTraceHeaderPayload64bitV2 =
      'AAABAAYBAQWxHQAABAAAADsuzRRYLM8BYWECAAAAAAABAAEAtgEAAAEAAAAIAAAAHwAAA' +
      'KAGAAAAAAAAAAAAAAAAAAAAAAAALAEAAEAAdAB6AHIAZQBzAC4AZABsAGwALAAtADEAMQ' +
      'AyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAABAAIAAAAAAAA' +
      'AAAAAAEAAdAB6AHIAZQBzAC4AZABsAGwALAAtADEAMQAxAAAAAAAAAAAAAAAAAAAAAAAA' +
      'AAAAAAAAAAAAAAAAAAAAAAAAAAMAAAACAAIAAAAAAAAAxP///wAAAABZQyWiwCvPAX1GG' +
      'QAAAAAALWSZBFgszwEBAAAAAAAAAFIAZQBsAG8AZwBnAGUAcgAAAEMAOgBcAGsAZQByAG' +
      '4AZQBsAC4AZQB0AGwAAAA=';

  test('DecodeFields', function() {

    var importer = new tr.e.importer.etw.EtwImporter('dummy', []);
    var decoder = importer.decoder_;
    var parser = new tr.e.importer.etw.EventTraceParser(importer);
    var header;
    var fields;

    // Validate a version 2 32-bit payload.
    header = {
      guid: guid, opcode: kEventTraceHeaderOpcode, version: 2, is64: 0
    };
    decoder.reset(kEventTraceHeaderPayload32bitV2);
    fields = parser.decodeFields(header, decoder);

    assert.equal(fields.bufferSize, 65536);
    assert.equal(fields.version, 83951878);
    assert.equal(fields.providerVersion, 7600);
    assert.equal(fields.numberOfProcessors, 16);
    assert.strictEqual(fields.endTime, '01cc08c861d52c11');
    assert.equal(fields.timerResolution, 156001);
    assert.equal(fields.maxFileSize, 100);
    assert.equal(fields.logFileMode, 1);
    assert.equal(fields.buffersWritten, 3);
    assert.equal(fields.startBuffers, 1);
    assert.equal(fields.pointerSize, 4);
    assert.equal(fields.eventsLost, 0);
    assert.equal(fields.cpuSpeed, 2394);
    assert.equal(fields.loggerName, 5);
    assert.equal(fields.logFileName, 6);
    assert.strictEqual(fields.timeZoneInformation.standardName,
                       '@tzres.dll,-112');
    assert.strictEqual(fields.timeZoneInformation.daylightName,
                       '@tzres.dll,-111');
    assert.strictEqual(fields.bootTime, '01cc05afdf9b437f');
    assert.strictEqual(fields.perfFreq, '000000000023ac9d');
    assert.strictEqual(fields.startTime, '01cc08c860a3342c');
    assert.equal(fields.reservedFlags, 1);
    assert.equal(fields.buffersLost, 0);
    assert.strictEqual(fields.sessionNameString, 'Make Test Data Session');
    assert.strictEqual(fields.logFileNameString,
                       'c:\\src\\sawbuck\\trunk\\src\\sawbuck\\log_lib\\' +
                       'test_data\\image_data_32_v0.etl');

    // Validate a version 2 64-bit payload.
    header = {
      guid: guid, opcode: kEventTraceHeaderOpcode, version: 2, is64: 1
    };
    decoder.reset(kEventTraceHeaderPayload64bitV2);
    fields = parser.decodeFields(header, decoder);

    assert.equal(fields.bufferSize, 65536);
    assert.equal(fields.version, 83951878);
    assert.equal(fields.providerVersion, 7601);
    assert.equal(fields.numberOfProcessors, 4);
    assert.strictEqual(fields.endTime, '01cf2c5814cd2e3b');
    assert.equal(fields.timerResolution, 156001);
    assert.equal(fields.maxFileSize, 0);
    assert.equal(fields.logFileMode, 0x10001);
    assert.equal(fields.buffersWritten, 438);
    assert.equal(fields.startBuffers, 1);
    assert.equal(fields.pointerSize, 8);
    assert.equal(fields.eventsLost, 31);
    assert.equal(fields.cpuSpeed, 1696);
    assert.equal(fields.loggerName, 0);
    assert.equal(fields.logFileName, 0);
    assert.strictEqual(fields.timeZoneInformation.standardName,
        '@tzres.dll,-112');
    assert.strictEqual(fields.timeZoneInformation.daylightName,
        '@tzres.dll,-111');
    assert.strictEqual(fields.bootTime, '01cf2bc0a2254359');
    assert.strictEqual(fields.perfFreq, '000000000019467d');
    assert.strictEqual(fields.startTime, '01cf2c580499642d');
    assert.equal(fields.reservedFlags, 1);
    assert.equal(fields.buffersLost, 0);
    assert.strictEqual(fields.sessionNameString, 'Relogger');
    assert.strictEqual(fields.logFileNameString, 'C:\\kernel.etl');
  });
});
</script>

