-
Notifications
You must be signed in to change notification settings - Fork 74
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
138 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
import _ from 'lodash'; | ||
|
||
describe('Image util functions tests', () => { | ||
// TODO: Use test hooks to test the functions | ||
const getBaseVersion = (IMAGE_NAME: string) => { | ||
return ( | ||
_.first(_.split(_.last(_.split(IMAGE_NAME, ':')), /[^a-zA-Z\d.]+/)) || '' | ||
); | ||
}; | ||
|
||
const getBaseImage = (IMAGE_NAME: string) => { | ||
const splitByColon = _.split(IMAGE_NAME, ':'); | ||
const beforeLastColon = _.join(_.initial(splitByColon), ':'); | ||
const lastItemAfterSplitBySlash = _.last(_.split(beforeLastColon, '/')); | ||
return lastItemAfterSplitBySlash || ''; | ||
}; | ||
|
||
const getTags = ( | ||
tag: string, | ||
labels: Array<{ key: string; value: string }>, | ||
) => { | ||
// Remove the 'customized_' prefix and its following string from the tag | ||
const cleanedTag = _.replace(tag, /customized_[a-zA-Z\d.]+/, ''); | ||
// Split the remaining tag into segments based on alphanumeric and '.' characters, ignoring the first segment | ||
const tags = _.tail(_.split(cleanedTag, /[^a-zA-Z\d.]+/)); | ||
const result: Array<{ key: string; value: string }> = []; | ||
|
||
// Process not 'customized_' tags | ||
_.forEach(tags, (currentTag) => { | ||
// Separate the alphabetic prefix from the numeric and '.' suffix for each tag | ||
const match = /^([a-zA-Z]+)(.*)$/.exec(currentTag); | ||
if (match) { | ||
const [, key, value] = match; | ||
// Ensure the value is an empty string if it's undefined | ||
result.push({ key, value: value || '' }); | ||
} | ||
}); | ||
|
||
// Handle the 'customized_' tag separately by finding the custom image name in labels | ||
const customizedNameLabel = _.get( | ||
_.find(labels, { key: 'ai.backend.customized-image.name' }), | ||
'value', | ||
'', | ||
); | ||
// If a custom image name exists, add it to the result with the key 'Customized' | ||
if (customizedNameLabel) { | ||
result.push({ key: 'Customized', value: customizedNameLabel }); | ||
} | ||
|
||
// Remove duplicates and entries with an empty 'key' | ||
return _.uniqWith( | ||
_.filter(result, ({ key }) => !_.isEmpty(key)), | ||
_.isEqual, | ||
); | ||
}; | ||
|
||
describe('Test with underbar image tag', () => { | ||
const IMAGE_NAME = 'abc-def.ghi.systems/llm/jkl/mno_pqr:0.0.0_stu'; | ||
describe('getBaseVersion', () => { | ||
it('should correctly parse the base version from an image name', () => { | ||
const baseVersion = getBaseVersion(IMAGE_NAME); | ||
expect(baseVersion).toBe('0.0.0'); | ||
}); | ||
}); | ||
|
||
describe('getBaseImage', () => { | ||
it('should correctly parse the base image from an image name', () => { | ||
const baseImage = getBaseImage(IMAGE_NAME); | ||
expect(baseImage).toBe('mno_pqr'); | ||
}); | ||
}); | ||
|
||
describe('getTags', () => { | ||
it('should correctly parse and process tags from a given tag string', () => { | ||
const tag = '0.0.0_stu'; | ||
const labels = [{ key: 'abc', value: 'def' }]; | ||
const tags = getTags(tag, labels); | ||
expect(tags).toEqual([{ key: 'stu', value: '' }]); | ||
}); | ||
}); | ||
}); | ||
describe('Test with dash image tag', () => { | ||
const IMAGE_NAME = 'abc-def.ghi.systems/llm/jkl/mno_pqr:0.0.0-stu'; | ||
describe('getBaseVersion', () => { | ||
it('should correctly parse the base version from an image name', () => { | ||
const baseVersion = getBaseVersion(IMAGE_NAME); | ||
expect(baseVersion).toBe('0.0.0'); | ||
}); | ||
}); | ||
|
||
describe('getBaseImage', () => { | ||
it('should correctly parse the base image from an image name', () => { | ||
const baseImage = getBaseImage(IMAGE_NAME); | ||
expect(baseImage).toBe('mno_pqr'); | ||
}); | ||
}); | ||
|
||
describe('getTags', () => { | ||
it('should correctly parse and process tags from a given tag string', () => { | ||
const tag = '0.0.0_stu'; | ||
const labels = [{ key: 'abc', value: 'def' }]; | ||
const tags = getTags(tag, labels); | ||
expect(tags).toEqual([{ key: 'stu', value: '' }]); | ||
}); | ||
}); | ||
}); | ||
describe('Test with customized image tag', () => { | ||
const IMAGE_NAME = | ||
'abc-def.ghi.systems/llm/jkl/mno_pqr:0.0.0-stu_customized_asdflkjnweri'; | ||
describe('getBaseVersion', () => { | ||
it('should correctly parse the base version from an image name', () => { | ||
const baseVersion = getBaseVersion(IMAGE_NAME); | ||
expect(baseVersion).toBe('0.0.0'); | ||
}); | ||
}); | ||
|
||
describe('getBaseImage', () => { | ||
it('should correctly parse the base image from an image name', () => { | ||
const baseImage = getBaseImage(IMAGE_NAME); | ||
expect(baseImage).toBe('mno_pqr'); | ||
}); | ||
}); | ||
|
||
describe('getTags', () => { | ||
it('should handle customized_ tags correctly', () => { | ||
const tag = '0.0.0-stu_customized_asdflkjnweri'; | ||
const labels = [ | ||
{ key: 'ai.backend.customized-image.name', value: 'CustomImage' }, | ||
]; | ||
const tags = getTags(tag, labels); | ||
expect(tags).toEqual([ | ||
{ key: 'stu', value: '' }, | ||
{ key: 'Customized', value: 'CustomImage' }, | ||
]); | ||
}); | ||
}); | ||
}); | ||
}); |