Files
peardock/test/image-updates.test.js
T
Raven Scott 42f066fa47
Release rolling / release (push) Has been cancelled
Fix image update checks against registries on Bare.
Registry HTTP now sets host/hostname, disables keep-alive, and times out cleanly; resolve container image tags/digests more reliably and surface check errors in the UI.
2026-07-15 15:31:46 -04:00

71 lines
2.1 KiB
JavaScript

import test from 'brittle'
import {
parseImageRef,
normalizeDigest,
digestsFromInspect,
preferredRepoTag,
} from '../server/services/image-updates.js'
test('parseImageRef handles Docker Hub short names', (t) => {
const r = parseImageRef('nginx:alpine')
t.ok(r)
t.is(r.registry, 'registry-1.docker.io')
t.is(r.repository, 'library/nginx')
t.is(r.tag, 'alpine')
t.ok(r.isOfficial)
t.absent(r.isPinned)
})
test('parseImageRef handles user/repo on Hub', (t) => {
const r = parseImageRef('library/redis:7')
t.is(r.repository, 'library/redis')
t.is(r.tag, '7')
t.is(r.host, 'docker.io')
})
test('parseImageRef handles ghcr and custom registries', (t) => {
const g = parseImageRef('ghcr.io/org/app:1.2.3')
t.is(g.registry, 'ghcr.io')
t.is(g.repository, 'org/app')
t.is(g.tag, '1.2.3')
const c = parseImageRef('registry.example.com:5000/ns/img:v2')
t.is(c.registry, 'registry.example.com:5000')
t.is(c.repository, 'ns/img')
t.is(c.tag, 'v2')
})
test('parseImageRef digests and bare ids', (t) => {
const pinned = parseImageRef('nginx@sha256:abc123')
t.ok(pinned.isPinned)
t.is(pinned.digest, 'sha256:abc123')
t.is(parseImageRef('sha256:deadbeef'), null)
t.is(parseImageRef('a1b2c3d4e5f6'), null)
t.is(parseImageRef(''), null)
t.is(parseImageRef('<none>:<none>'), null)
})
test('parseImageRef defaults tag to latest', (t) => {
const r = parseImageRef('postgres')
t.is(r.tag, 'latest')
t.is(r.repository, 'library/postgres')
})
test('normalizeDigest and digestsFromInspect', (t) => {
t.is(normalizeDigest('sha256:abc'), 'sha256:abc')
t.is(normalizeDigest('abc'), 'sha256:abc')
t.is(normalizeDigest(''), null)
const digests = digestsFromInspect({
RepoDigests: [
'nginx@sha256:1111111111111111111111111111111111111111111111111111111111111111',
'docker.io/library/nginx@sha256:2222222222222222222222222222222222222222222222222222222222222222',
],
})
t.is(digests.length, 2)
t.ok(digests[0].startsWith('sha256:'))
t.is(preferredRepoTag({ RepoTags: ['<none>:<none>', 'nginx:alpine'] }), 'nginx:alpine')
t.is(preferredRepoTag({ RepoTags: [] }), null)
})