11import { HttpResponse } from "@smithy/core/protocols" ;
22import { Readable } from "node:stream" ;
3- import { afterAll , describe , expect , test as it , vi } from "vitest" ;
3+ import { afterAll , beforeEach , describe , expect , test as it , vi } from "vitest" ;
44
55import { fromHttp } from "./fromHttp" ;
66import * as helpers from "./requestHelpers" ;
@@ -51,6 +51,11 @@ vi.mock("fs/promises", () => ({
5151} ) ) ;
5252
5353describe ( fromHttp . name , ( ) => {
54+ beforeEach ( ( ) => {
55+ mockHandle . mockClear ( ) ;
56+ mockDestroy . mockClear ( ) ;
57+ } ) ;
58+
5459 afterAll ( ( ) => {
5560 vi . resetAllMocks ( ) ;
5661 } ) ;
@@ -81,9 +86,23 @@ describe(fromHttp.name, () => {
8186 } ) ;
8287 } ) ;
8388
89+ it ( "relative uri should take precedence over full uri" , async ( ) => {
90+ const provider = fromHttp ( {
91+ awsContainerCredentialsFullUri : "https://u1.aws" ,
92+ awsContainerCredentialsRelativeUri : "/credential-path" ,
93+ } ) ;
94+
95+ await provider ( ) ;
96+
97+ expect ( mockHandle ) . toHaveBeenCalledWith ( helpers . createGetRequest ( new URL ( "http://169.254.170.2/credential-path" ) ) , {
98+ requestTimeout : 1000 ,
99+ } ) ;
100+ } ) ;
101+
84102 it ( "can use the token" , async ( ) => {
85103 const provider = fromHttp ( {
86104 awsContainerCredentialsFullUri : "https://t1.aws" ,
105+ awsContainerCredentialsRelativeUri : "" ,
87106 awsContainerAuthorizationToken : mockToken ,
88107 } ) ;
89108
@@ -98,20 +117,48 @@ describe(fromHttp.name, () => {
98117 it ( "can use the token file" , async ( ) => {
99118 const provider = fromHttp ( {
100119 awsContainerCredentialsFullUri : "https://t2.aws" ,
120+ awsContainerCredentialsRelativeUri : "" ,
101121 awsContainerAuthorizationTokenFile : "some-file" ,
102122 } ) ;
103123
104- const request = helpers . createGetRequest ( new URL ( "https://t1.aws" ) ) ;
124+ const request = helpers . createGetRequest ( new URL ( "https://t2.aws" ) ) ;
125+ request . headers . Authorization = mockToken ;
126+
127+ await provider ( ) ;
128+
129+ expect ( mockHandle ) . toHaveBeenCalledWith ( request , { requestTimeout : 1000 } ) ;
130+ } ) ;
131+
132+ it ( "token file takes precedence over token" , async ( ) => {
133+ const provider = fromHttp ( {
134+ awsContainerCredentialsFullUri : "https://t3.aws" ,
135+ awsContainerCredentialsRelativeUri : "" ,
136+ awsContainerAuthorizationToken : "static-token" ,
137+ awsContainerAuthorizationTokenFile : "some-file" ,
138+ } ) ;
139+
140+ const request = helpers . createGetRequest ( new URL ( "https://t3.aws" ) ) ;
105141 request . headers . Authorization = mockToken ;
106142
107143 await provider ( ) ;
108144
109145 expect ( mockHandle ) . toHaveBeenCalledWith ( request , { requestTimeout : 1000 } ) ;
110146 } ) ;
111147
148+ it ( "rejects token containing \\r\\n" , async ( ) => {
149+ const provider = fromHttp ( {
150+ awsContainerCredentialsFullUri : "https://t4.aws" ,
151+ awsContainerCredentialsRelativeUri : "" ,
152+ awsContainerAuthorizationToken : "Bearer token\r\nX-Injected: header" ,
153+ } ) ;
154+
155+ await expect ( provider ( ) ) . rejects . toThrow ( "Authorization token contains invalid \\r\\n sequence." ) ;
156+ } ) ;
157+
112158 it ( "passes custom timeout as requestTimeout to handle()" , async ( ) => {
113159 const provider = fromHttp ( {
114160 awsContainerCredentialsFullUri : "https://u1.aws" ,
161+ awsContainerCredentialsRelativeUri : "" ,
115162 timeout : 5000 ,
116163 } ) ;
117164
@@ -121,10 +168,9 @@ describe(fromHttp.name, () => {
121168 } ) ;
122169
123170 it ( "destroys the request handler after the provider resolves" , async ( ) => {
124- mockDestroy . mockClear ( ) ;
125-
126171 const provider = fromHttp ( {
127172 awsContainerCredentialsFullUri : "https://u1.aws" ,
173+ awsContainerCredentialsRelativeUri : "" ,
128174 } ) ;
129175
130176 await provider ( ) ;
@@ -133,14 +179,14 @@ describe(fromHttp.name, () => {
133179 } ) ;
134180
135181 it ( "destroys the request handler even when the request fails" , async ( ) => {
136- mockDestroy . mockClear ( ) ;
137182 mockHandle . mockRejectedValueOnce ( new Error ( "network error" ) ) ;
138183 mockHandle . mockRejectedValueOnce ( new Error ( "network error" ) ) ;
139184 mockHandle . mockRejectedValueOnce ( new Error ( "network error" ) ) ;
140185 mockHandle . mockRejectedValueOnce ( new Error ( "network error" ) ) ;
141186
142187 const provider = fromHttp ( {
143188 awsContainerCredentialsFullUri : "https://u1.aws" ,
189+ awsContainerCredentialsRelativeUri : "" ,
144190 } ) ;
145191
146192 await expect ( provider ( ) ) . rejects . toThrow ( ) ;
0 commit comments