mirror of
https://github.com/docker/login-action
synced 2024-11-22 13:11:40 +00:00
Mostly tests and some small changes (#16)
* Create docker.test.ts * Add context tests * test main
This commit is contained in:
parent
34d5f75b0d
commit
4b15841c41
5 changed files with 148 additions and 8 deletions
16
__tests__/context.test.ts
Normal file
16
__tests__/context.test.ts
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
import osm = require('os');
|
||||||
|
|
||||||
|
import {getInputs} from '../src/context';
|
||||||
|
|
||||||
|
test('without password getInputs throws errors', async () => {
|
||||||
|
expect(() => {
|
||||||
|
getInputs();
|
||||||
|
}).toThrowError('Input required and not supplied: password');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('with password getInputs does not error', async () => {
|
||||||
|
process.env['INPUT_PASSWORD'] = 'groundcontrol';
|
||||||
|
expect(() => {
|
||||||
|
getInputs();
|
||||||
|
}).not.toThrowError();
|
||||||
|
});
|
49
__tests__/docker.test.ts
Normal file
49
__tests__/docker.test.ts
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
import {loginStandard, logout} from '../src/docker';
|
||||||
|
|
||||||
|
import * as path from 'path';
|
||||||
|
|
||||||
|
import * as exec from '@actions/exec';
|
||||||
|
|
||||||
|
process.env['RUNNER_TEMP'] = path.join(__dirname, 'runner');
|
||||||
|
|
||||||
|
test('loginStandard calls exec', async () => {
|
||||||
|
const execSpy: jest.SpyInstance = jest.spyOn(exec, 'exec');
|
||||||
|
// don't let exec try to actually run the commands
|
||||||
|
execSpy.mockImplementation(() => {});
|
||||||
|
|
||||||
|
const username: string = 'dbowie';
|
||||||
|
const password: string = 'groundcontrol';
|
||||||
|
const registry: string = 'https://ghcr.io';
|
||||||
|
|
||||||
|
await loginStandard(registry, username, password);
|
||||||
|
|
||||||
|
expect(execSpy).toHaveBeenCalledWith(`docker`, ['login', '--password-stdin', '--username', username, registry], {
|
||||||
|
input: Buffer.from(password),
|
||||||
|
silent: true,
|
||||||
|
ignoreReturnCode: true,
|
||||||
|
listeners: expect.objectContaining({
|
||||||
|
stdout: expect.any(Function),
|
||||||
|
stderr: expect.any(Function)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('logout calls exec', async () => {
|
||||||
|
const execSpy: jest.SpyInstance = jest.spyOn(exec, 'exec');
|
||||||
|
// don't let exec try to actually run the commands
|
||||||
|
execSpy.mockImplementation(() => {});
|
||||||
|
|
||||||
|
const registry: string = 'https://ghcr.io';
|
||||||
|
|
||||||
|
await logout(registry);
|
||||||
|
|
||||||
|
expect(execSpy).toHaveBeenCalledWith(`docker`, ['logout', registry], {
|
||||||
|
silent: false,
|
||||||
|
ignoreReturnCode: true,
|
||||||
|
input: Buffer.from(''),
|
||||||
|
listeners: expect.objectContaining({
|
||||||
|
stdout: expect.any(Function),
|
||||||
|
stderr: expect.any(Function)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
});
|
76
__tests__/main.test.ts
Normal file
76
__tests__/main.test.ts
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
import osm = require('os');
|
||||||
|
|
||||||
|
import {run} from '../src/main';
|
||||||
|
import * as docker from '../src/docker';
|
||||||
|
import * as stateHelper from '../src/state-helper';
|
||||||
|
|
||||||
|
import * as core from '@actions/core';
|
||||||
|
|
||||||
|
test('errors when not run on linux platform', async () => {
|
||||||
|
const platSpy = jest.spyOn(osm, 'platform');
|
||||||
|
platSpy.mockImplementation(() => 'netbsd');
|
||||||
|
|
||||||
|
const coreSpy: jest.SpyInstance = jest.spyOn(core, 'setFailed');
|
||||||
|
|
||||||
|
await run();
|
||||||
|
|
||||||
|
expect(coreSpy).toHaveBeenCalledWith('Only supported on linux platform');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('errors without password', async () => {
|
||||||
|
const platSpy = jest.spyOn(osm, 'platform');
|
||||||
|
platSpy.mockImplementation(() => 'linux');
|
||||||
|
|
||||||
|
const coreSpy: jest.SpyInstance = jest.spyOn(core, 'setFailed');
|
||||||
|
|
||||||
|
await run();
|
||||||
|
|
||||||
|
expect(coreSpy).toHaveBeenCalledWith('Input required and not supplied: password');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('successful with only password', async () => {
|
||||||
|
const platSpy = jest.spyOn(osm, 'platform');
|
||||||
|
platSpy.mockImplementation(() => 'linux');
|
||||||
|
|
||||||
|
const setRegistrySpy: jest.SpyInstance = jest.spyOn(stateHelper, 'setRegistry');
|
||||||
|
const setLogoutSpy: jest.SpyInstance = jest.spyOn(stateHelper, 'setLogout');
|
||||||
|
const dockerSpy: jest.SpyInstance = jest.spyOn(docker, 'login');
|
||||||
|
dockerSpy.mockImplementation(() => {});
|
||||||
|
|
||||||
|
const password: string = 'groundcontrol';
|
||||||
|
process.env[`INPUT_PASSWORD`] = password;
|
||||||
|
|
||||||
|
await run();
|
||||||
|
|
||||||
|
expect(setRegistrySpy).toHaveBeenCalledWith('');
|
||||||
|
expect(setLogoutSpy).toHaveBeenCalledWith('');
|
||||||
|
expect(dockerSpy).toHaveBeenCalledWith('', '', password);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('calls docker login', async () => {
|
||||||
|
const platSpy = jest.spyOn(osm, 'platform');
|
||||||
|
platSpy.mockImplementation(() => 'linux');
|
||||||
|
|
||||||
|
const setRegistrySpy: jest.SpyInstance = jest.spyOn(stateHelper, 'setRegistry');
|
||||||
|
const setLogoutSpy: jest.SpyInstance = jest.spyOn(stateHelper, 'setLogout');
|
||||||
|
const dockerSpy: jest.SpyInstance = jest.spyOn(docker, 'login');
|
||||||
|
dockerSpy.mockImplementation(() => {});
|
||||||
|
|
||||||
|
const username: string = 'dbowie';
|
||||||
|
process.env[`INPUT_USERNAME`] = username;
|
||||||
|
|
||||||
|
const password: string = 'groundcontrol';
|
||||||
|
process.env[`INPUT_PASSWORD`] = password;
|
||||||
|
|
||||||
|
const registry: string = 'https://ghcr.io';
|
||||||
|
process.env[`INPUT_REGISTRY`] = registry;
|
||||||
|
|
||||||
|
const logout: string = 'true';
|
||||||
|
process.env['INPUT_LOGOUT'] = logout
|
||||||
|
|
||||||
|
await run();
|
||||||
|
|
||||||
|
expect(setRegistrySpy).toHaveBeenCalledWith(registry);
|
||||||
|
expect(setLogoutSpy).toHaveBeenCalledWith(logout);
|
||||||
|
expect(dockerSpy).toHaveBeenCalledWith(registry, username, password);
|
||||||
|
});
|
|
@ -7,7 +7,7 @@ export interface Inputs {
|
||||||
logout: string;
|
logout: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getInputs(): Promise<Inputs> {
|
export function getInputs(): Inputs {
|
||||||
return {
|
return {
|
||||||
registry: core.getInput('registry'),
|
registry: core.getInput('registry'),
|
||||||
username: core.getInput('username'),
|
username: core.getInput('username'),
|
||||||
|
|
13
src/main.ts
13
src/main.ts
|
@ -4,17 +4,16 @@ import {getInputs, Inputs} from './context';
|
||||||
import * as docker from './docker';
|
import * as docker from './docker';
|
||||||
import * as stateHelper from './state-helper';
|
import * as stateHelper from './state-helper';
|
||||||
|
|
||||||
async function run(): Promise<void> {
|
export async function run(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
if (os.platform() !== 'linux') {
|
if (os.platform() !== 'linux') {
|
||||||
core.setFailed('Only supported on linux platform');
|
throw new Error('Only supported on linux platform');
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let inputs: Inputs = await getInputs();
|
const {registry, username, password, logout} = getInputs();
|
||||||
stateHelper.setRegistry(inputs.registry);
|
stateHelper.setRegistry(registry);
|
||||||
stateHelper.setLogout(inputs.logout);
|
stateHelper.setLogout(logout);
|
||||||
await docker.login(inputs.registry, inputs.username, inputs.password);
|
await docker.login(registry, username, password);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
core.setFailed(error.message);
|
core.setFailed(error.message);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue