michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: /** michael@0: * Tests that automatically generated names for traces are unique. michael@0: */ michael@0: michael@0: var gDebuggee; michael@0: var gClient; michael@0: var gTraceClient; michael@0: michael@0: function run_test() michael@0: { michael@0: initTestTracerServer(); michael@0: gDebuggee = addTestGlobal("test-tracer-actor"); michael@0: gClient = new DebuggerClient(DebuggerServer.connectPipe()); michael@0: gClient.connect(function() { michael@0: attachTestTab(gClient, "test-tracer-actor", function(aResponse, aTabClient) { michael@0: gClient.attachTracer(aResponse.traceActor, function(aResponse, aTraceClient) { michael@0: gTraceClient = aTraceClient; michael@0: test_unique_generated_trace_names(); michael@0: }); michael@0: }); michael@0: }); michael@0: do_test_pending(); michael@0: } michael@0: michael@0: function test_unique_generated_trace_names() michael@0: { michael@0: let deferred = promise.defer(); michael@0: deferred.resolve([]); michael@0: michael@0: let p = deferred.promise, traces = 50; michael@0: for (let i = 0; i < traces; i++) michael@0: p = p.then(start_trace); michael@0: for (let i = 0; i < traces; i++) michael@0: p = p.then(stop_trace); michael@0: michael@0: p = p.then(function() { michael@0: finishClient(gClient); michael@0: }); michael@0: } michael@0: michael@0: function start_trace(aTraceNames) michael@0: { michael@0: let deferred = promise.defer(); michael@0: gTraceClient.startTrace([], null, function(aResponse) { michael@0: let hasDuplicates = aTraceNames.some(name => name === aResponse.name); michael@0: do_check_true(!hasDuplicates, "Generated trace names should be unique"); michael@0: aTraceNames.push(aResponse.name); michael@0: deferred.resolve(aTraceNames); michael@0: }); michael@0: return deferred.promise; michael@0: } michael@0: michael@0: function stop_trace(aTraceNames) michael@0: { michael@0: let deferred = promise.defer(); michael@0: gTraceClient.stopTrace(null, function(aResponse) { michael@0: do_check_eq(aTraceNames.pop(), aResponse.name, michael@0: "Stopped trace should be most recently started trace"); michael@0: let hasDuplicates = aTraceNames.some(name => name === aResponse.name); michael@0: do_check_true(!hasDuplicates, "Generated trace names should be unique"); michael@0: deferred.resolve(aTraceNames); michael@0: }); michael@0: return deferred.promise; michael@0: }