提交 2fe95046 编写于 作者: H higashi

Move logic to separete file

上级 91fbf42c
// Copyright 2015 Google Inc. All Rights Reserved.
//
// 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.
/**
* Parser to get TAG from reference of Docker container image
*
* Docker Container image can be set with the following value:
* [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]
* REGISTRY can be omitted and NAME can contain '/' as delimiters for NAMESPACE.
*
* So only TAG is specified.
*
*/
export default class DockerImageIdentifier {
/**
* Constructs DockerUri object.
*
* @param {string} identifier
*/
constructor(identifier = '') { this.identifier = identifier; }
/**
* Returns tag
*
* TAG cannot contain ':' and '/'.
* Not if TAG is omitted, last block text(separated by '/') contains TAG.
* @return {string}
*/
tag() {
/** @type {number} **/
let index = this.identifier.lastIndexOf('/');
/** @type {string} **/
let last_block;
if (index > -1) {
last_block = this.identifier.substring(index + 1);
} else {
last_block = this.identifier
}
index = last_block.lastIndexOf(':');
if (index > -1) {
return last_block.substring(index + 1);
}
return ''
}
}
......@@ -19,6 +19,7 @@ import {
stateName as replicationcontrollerliststate,
} from 'replicationcontrollerlist/replicationcontrollerlist_state';
import {uniqueNameValidationKey} from './uniquename_directive';
import DockerImageReference from '../common/docker/dockerimagereference';
// Label keys for predefined labels
const APP_LABEL_KEY = 'app';
......@@ -345,25 +346,7 @@ export default class DeployFromSettingsController {
* @return {string}
* @private
*/
getContainerImageVersion_() {
/** @type {number} */
let index = (this.containerImage || '').lastIndexOf('/');
let imagename;
if (index > -1) {
imagename = this.containerImage.substring(index + 1);
} else {
imagename = this.containerImage;
}
index = (imagename || '').lastIndexOf(':');
if (index > -1) {
return imagename.substring(index + 1);
}
return '';
}
getContainerImageVersion_() { return new DockerImageReference(this.containerImage).tag(); }
/**
* Returns application name.
......
// Copyright 2015 Google Inc. All Rights Reserved.
//
// 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.
import DockerImageReference from 'common/docker/dockerimagereference';
describe('DokcerImageReference', () => {
it('should return empty string when containerImage is undefined', () => {
// given
let reference = undefined;
// when
let result = new DockerImageReference(reference).tag();
// then
expect(result).toEqual('');
});
it('should return empty string when containerImage is empty', () => {
// given
let reference = "";
// when
let result = new DockerImageReference(reference).tag();
// then
expect(result).toEqual('');
});
it('should return empty string when containerImage is not empty and does not contain `:`' +
' delimiter',
() => {
// given
let reference = 'test';
// when
let result = new DockerImageReference(reference).tag();
// then
expect(result).toEqual('');
});
it('should return part of the string after `:` delimiter', () => {
// given
let reference = 'test:1';
// when
let result = new DockerImageReference(reference).tag();
// then
expect(result).toEqual('1');
});
it('should return part of the string after `:` delimiter', () => {
// given
let reference = 'test:1';
// when
let result = new DockerImageReference(reference).tag();
// then
expect(result).toEqual('1');
});
it('should return part of the string after `:` delimiter', () => {
// given
let reference = 'private.registry:5000/test:1';
// when
let result = new DockerImageReference(reference).tag();
// then
expect(result).toEqual('1');
});
it('should return empty string when containerImage is not empty and does not containe `:`' +
' delimiter after `/` delimiter',
() => {
// given
let reference = 'private.registry:5000/test';
// when
let result = new DockerImageReference(reference).tag();
// then
expect(result).toEqual('');
});
it('should return part of the string after `:` delimiter when containerImage is not empty' +
'and containe two `/` delimiters',
() => {
// given
let reference = 'private.registry:5000/namespace/test:1';
// when
let result = new DockerImageReference(reference).tag();
// then
expect(result).toEqual('1');
});
it('should return part of the string after last `:` delimiter when containerImage is not empty' +
' and containe two `:` delimiters',
() => {
// given
let reference = 'private.registry:5000/test:image:1';
// when
let result = new DockerImageReference(reference).tag();
// then
expect(result).toEqual('1');
});
it('should return empty string when containerImage is only `:` delimiter', () => {
// given
let reference = ':';
// when
let result = new DockerImageReference(reference).tag();
// then
expect(result).toEqual('');
});
it('should return empty string when containerImage is only `/` delimiter', () => {
// given
let reference = '/';
// when
let result = new DockerImageReference(reference).tag();
// then
expect(result).toEqual('');
});
it('should return empty string when containerImage is only `/` delimiter' +
' and `:` delimiter',
() => {
// given
let reference = '/:';
// when
let result = new DockerImageReference(reference).tag();
// then
expect(result).toEqual('');
});
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册