Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ export class LiveTailSession {
if (!commandOutput.responseStream) {
throw new ToolkitError('LiveTail session response stream is undefined.')
}
this.startTime = Date.now()
this.startTime = globals.clock.Date.now()
this.endTime = undefined
this.statusBarUpdateTimer = globals.clock.setInterval(() => {
this.updateStatusBarItemText()
Expand All @@ -102,7 +102,7 @@ export class LiveTailSession {
}

public stopLiveTailSession() {
this.endTime = Date.now()
this.endTime = globals.clock.Date.now()
this.statusBarItem.dispose()
globals.clock.clearInterval(this.statusBarUpdateTimer)
this.liveTailClient.abortController.abort()
Expand All @@ -116,7 +116,7 @@ export class LiveTailSession {
}
//Currently running
if (this.endTime === undefined) {
return Date.now() - this.startTime
return globals.clock.Date.now() - this.startTime
}
return this.endTime - this.startTime
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,44 @@
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
import * as sinon from 'sinon'
import * as FakeTimers from '@sinonjs/fake-timers'
import assert from 'assert'
import { LiveTailSession } from '../../../../awsService/cloudWatchLogs/registry/liveTailSession'
import { StartLiveTailCommand } from '@aws-sdk/client-cloudwatch-logs'
import {
CloudWatchLogsClient,
StartLiveTailCommand,
StartLiveTailResponseStream,
} from '@aws-sdk/client-cloudwatch-logs'
import { LogStreamFilterResponse } from '../../../../awsService/cloudWatchLogs/wizard/liveTailLogStreamSubmenu'
import { installFakeClock } from '../../../testUtil'

describe('LiveTailSession', async function () {
const testLogGroupArn = 'arn:aws:test-log-group'
const testRegion = 'test-region'
const testFilter = 'test-filter'
const testAwsCredentials = {} as any as AWS.Credentials

let sandbox: sinon.SinonSandbox
let clock: FakeTimers.InstalledClock

before(function () {
clock = installFakeClock()
})

beforeEach(function () {
clock.reset()
sandbox = sinon.createSandbox()
})

after(function () {
clock.uninstall()
})

afterEach(function () {
sandbox.restore()
})

it('builds StartLiveTailCommand: no stream Filter, no event filter.', function () {
const session = buildLiveTailSession({ type: 'all' }, undefined)
assert.deepStrictEqual(
Expand Down Expand Up @@ -65,6 +92,36 @@ describe('LiveTailSession', async function () {
)
})

it('closes a started session', async function () {
const startLiveTailStub = sinon.stub(CloudWatchLogsClient.prototype, 'send').callsFake(function () {
return {
responseStream: mockResponseStream(),
}
})
const session = buildLiveTailSession({ type: 'all' }, testFilter)
assert.strictEqual(session.getLiveTailSessionDuration(), 0)

const returnedResponseStream = await session.startLiveTailSession()
assert.strictEqual(startLiveTailStub.calledOnce, true)
const requestArgs = startLiveTailStub.getCall(0).args
assert.deepEqual(requestArgs[0].input, session.buildStartLiveTailCommand().input)
assert.strictEqual(requestArgs[1].abortSignal !== undefined && !requestArgs[1].abortSignal.aborted, true)
assert.strictEqual(session.isAborted, false)
assert.strictEqual(clock.countTimers(), 1)
assert.deepStrictEqual(returnedResponseStream, mockResponseStream())

clock.tick(1000)
assert.strictEqual(session.getLiveTailSessionDuration(), 1000)

session.stopLiveTailSession()
assert.strictEqual(session.isAborted, true)
assert.strictEqual(clock.countTimers(), 0)

//Session is stopped; ticking the clock forward should not change the session duration
clock.tick(1000)
assert.strictEqual(session.getLiveTailSessionDuration(), 1000)
})

function buildLiveTailSession(
logStreamFilter: LogStreamFilterResponse,
logEventFilterPattern: string | undefined
Expand All @@ -77,4 +134,16 @@ describe('LiveTailSession', async function () {
awsCredentials: testAwsCredentials,
})
}

async function* mockResponseStream(): AsyncIterable<StartLiveTailResponseStream> {
const frame: StartLiveTailResponseStream = {
sessionUpdate: {
sessionMetadata: {
sampled: false,
},
sessionResults: [],
},
}
yield frame
}
})
Loading