Read-only mirror — the public repositories of the Forgejo instance, refreshed every 10 minutes. The live instance (fg.dieschoenewolke.de) is reachable only over the VPN; clone here with https://git.dieschoenewolke.de/git/<owner>/<repo>.git.
summaryrefslogtreecommitdiff
path: root/__test__
diff options
context:
space:
mode:
Diffstat (limited to '__test__')
-rw-r--r--__test__/git-command-manager.test.ts117
1 files changed, 117 insertions, 0 deletions
diff --git a/__test__/git-command-manager.test.ts b/__test__/git-command-manager.test.ts
index cea73d4..23b8863 100644
--- a/__test__/git-command-manager.test.ts
+++ b/__test__/git-command-manager.test.ts
@@ -376,3 +376,120 @@ describe('Test fetchDepth and fetchTags options', () => {
)
})
})
+
+describe('git user-agent with orchestration ID', () => {
+ beforeEach(async () => {
+ jest.spyOn(fshelper, 'fileExistsSync').mockImplementation(jest.fn())
+ jest.spyOn(fshelper, 'directoryExistsSync').mockImplementation(jest.fn())
+ })
+
+ afterEach(() => {
+ jest.restoreAllMocks()
+ // Clean up environment variable to prevent test pollution
+ delete process.env['ACTIONS_ORCHESTRATION_ID']
+ })
+
+ it('should include orchestration ID in user-agent when ACTIONS_ORCHESTRATION_ID is set', async () => {
+ const orchId = 'test-orch-id-12345'
+ process.env['ACTIONS_ORCHESTRATION_ID'] = orchId
+
+ let capturedEnv: any = null
+ mockExec.mockImplementation((path, args, options) => {
+ if (args.includes('version')) {
+ options.listeners.stdout(Buffer.from('2.18'))
+ }
+ // Capture env on any command
+ capturedEnv = options.env
+ return 0
+ })
+ jest.spyOn(exec, 'exec').mockImplementation(mockExec)
+
+ const workingDirectory = 'test'
+ const lfs = false
+ const doSparseCheckout = false
+ git = await commandManager.createCommandManager(
+ workingDirectory,
+ lfs,
+ doSparseCheckout
+ )
+
+ // Call a git command to trigger env capture after user-agent is set
+ await git.init()
+
+ // Verify the user agent includes the orchestration ID
+ expect(git).toBeDefined()
+ expect(capturedEnv).toBeDefined()
+ expect(capturedEnv['GIT_HTTP_USER_AGENT']).toBe(
+ `git/2.18 (github-actions-checkout) actions_orchestration_id/${orchId}`
+ )
+ })
+
+ it('should sanitize invalid characters in orchestration ID', async () => {
+ const orchId = 'test (with) special/chars'
+ process.env['ACTIONS_ORCHESTRATION_ID'] = orchId
+
+ let capturedEnv: any = null
+ mockExec.mockImplementation((path, args, options) => {
+ if (args.includes('version')) {
+ options.listeners.stdout(Buffer.from('2.18'))
+ }
+ // Capture env on any command
+ capturedEnv = options.env
+ return 0
+ })
+ jest.spyOn(exec, 'exec').mockImplementation(mockExec)
+
+ const workingDirectory = 'test'
+ const lfs = false
+ const doSparseCheckout = false
+ git = await commandManager.createCommandManager(
+ workingDirectory,
+ lfs,
+ doSparseCheckout
+ )
+
+ // Call a git command to trigger env capture after user-agent is set
+ await git.init()
+
+ // Verify the user agent has sanitized orchestration ID (spaces, parentheses, slash replaced)
+ expect(git).toBeDefined()
+ expect(capturedEnv).toBeDefined()
+ expect(capturedEnv['GIT_HTTP_USER_AGENT']).toBe(
+ 'git/2.18 (github-actions-checkout) actions_orchestration_id/test__with__special_chars'
+ )
+ })
+
+ it('should not modify user-agent when ACTIONS_ORCHESTRATION_ID is not set', async () => {
+ delete process.env['ACTIONS_ORCHESTRATION_ID']
+
+ let capturedEnv: any = null
+ mockExec.mockImplementation((path, args, options) => {
+ if (args.includes('version')) {
+ options.listeners.stdout(Buffer.from('2.18'))
+ }
+ // Capture env on any command
+ capturedEnv = options.env
+ return 0
+ })
+ jest.spyOn(exec, 'exec').mockImplementation(mockExec)
+
+ const workingDirectory = 'test'
+ const lfs = false
+ const doSparseCheckout = false
+ git = await commandManager.createCommandManager(
+ workingDirectory,
+ lfs,
+ doSparseCheckout
+ )
+
+ // Call a git command to trigger env capture after user-agent is set
+ await git.init()
+
+ // Verify the user agent does NOT contain orchestration ID
+ expect(git).toBeDefined()
+ expect(capturedEnv).toBeDefined()
+ expect(capturedEnv['GIT_HTTP_USER_AGENT']).toBe(
+ 'git/2.18 (github-actions-checkout)'
+ )
+ })
+})