Skip to content

Commit 4ce119f

Browse files
ewilkeniabudiab
authored andcommitted
fix bug on path appending
1 parent 599fb4d commit 4ce119f

File tree

2 files changed

+46
-40
lines changed

2 files changed

+46
-40
lines changed

Sources/SwiftkubeClient/Client/RequestBuilder.swift

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -315,10 +315,16 @@ extension RequestBuilder: DeleteStep {
315315
internal extension RequestBuilder {
316316

317317
func build() throws -> KubernetesRequest {
318-
components?.path = urlPath(forNamespace: namespace, name: resourceName)
318+
var temporaryComponents = components
319+
320+
temporaryComponents?.path += urlPath(forNamespace: namespace, name: resourceName)
319321

320322
if let subResourceType = subResourceType {
321-
components?.path += subResourceType.path
323+
temporaryComponents?.path += subResourceType.path
324+
}
325+
326+
if let queryItems = components?.queryItems {
327+
temporaryComponents?.queryItems = queryItems
322328
}
323329

324330
if requestBody?.type == .root {
@@ -336,45 +342,45 @@ internal extension RequestBuilder {
336342
}
337343

338344
if let readOptions = readOptions {
339-
readOptions.collectQueryItems().forEach(add(queryItem:))
345+
readOptions.collectQueryItems().forEach { add(queryItem: $0, to: &temporaryComponents) }
340346
}
341347

342348
if let listOptions = listOptions {
343-
listOptions.collectQueryItems().forEach(add(queryItem:))
349+
listOptions.collectQueryItems().forEach { add(queryItem: $0, to: &temporaryComponents) }
344350
}
345351

346352
if watchFlag {
347-
add(queryItem: URLQueryItem(name: "watch", value: "true"))
353+
add(queryItem: URLQueryItem(name: "watch", value: "true"), to: &temporaryComponents)
348354
}
349355

350356
if followFlag {
351-
add(queryItem: URLQueryItem(name: "follow", value: "true"))
357+
add(queryItem: URLQueryItem(name: "follow", value: "true"), to: &temporaryComponents)
352358
}
353359

354360
if previousFlag {
355-
add(queryItem: URLQueryItem(name: "previous", value: "true"))
361+
add(queryItem: URLQueryItem(name: "previous", value: "true"), to: &temporaryComponents)
356362
}
357363

358364
if timestampsFlag {
359-
add(queryItem: URLQueryItem(name: "timestamps", value: "true"))
365+
add(queryItem: URLQueryItem(name: "timestamps", value: "true"), to: &temporaryComponents)
360366
}
361367

362368
if let tailLinesFlag {
363-
add(queryItem: URLQueryItem(name: "tailLines", value: String(tailLinesFlag)))
369+
add(queryItem: URLQueryItem(name: "tailLines", value: String(tailLinesFlag)), to: &temporaryComponents)
364370
}
365371

366372
if let container = containerName {
367-
add(queryItem: URLQueryItem(name: "container", value: container))
373+
add(queryItem: URLQueryItem(name: "container", value: container), to: &temporaryComponents)
368374
}
369375

370-
if (components?.url?.absoluteString) == nil {
376+
if (temporaryComponents?.url?.absoluteString) == nil {
371377
throw SwiftkubeClientError.invalidURL
372378
}
373379

374380
let headers = buildHeaders(withAuthentication: config.authentication)
375381

376382
return KubernetesRequest(
377-
url: (components?.url)!,
383+
url: (temporaryComponents?.url)!,
378384
method: method,
379385
headers: headers,
380386
body: requestBody,
@@ -398,7 +404,7 @@ internal extension RequestBuilder {
398404
return url
399405
}
400406

401-
private func add(queryItem: URLQueryItem) {
407+
private func add(queryItem: URLQueryItem, to components: inout URLComponents?) {
402408
if components?.queryItems == nil {
403409
components?.queryItems = []
404410
}

Tests/SwiftkubeClientTests/RequestBuilderTests.swift

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ final class RequestBuilderTests: XCTestCase {
2828

2929
override func setUp() {
3030
config = KubernetesClientConfig(
31-
masterURL: URL(string: "https://kubernetesmaster")!,
31+
masterURL: URL(string: "https://kubernetes/master")!,
3232
namespace: "default",
3333
authentication: .basicAuth(username: "test", password: "test"),
3434
trustRoots: nil,
@@ -44,81 +44,81 @@ final class RequestBuilderTests: XCTestCase {
4444
let builder = RequestBuilder(config: config, gvr: gvr)
4545
var request = try? builder.in(.default).toGet().build()
4646

47-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/default/pods")!)
47+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/default/pods")!)
4848
XCTAssertEqual(request?.method, HTTPMethod.GET)
4949

5050
request = try? builder.in(.system).toGet().build()
5151

52-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/kube-system/pods")!)
52+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/kube-system/pods")!)
5353
XCTAssertEqual(request?.method, HTTPMethod.GET)
5454
}
5555

5656
func testGetInAllNamespaces() {
5757
let builder = RequestBuilder(config: config, gvr: gvr)
5858
let request = try? builder.in(.allNamespaces).toGet().build()
5959

60-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/pods")!)
60+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/pods")!)
6161
XCTAssertEqual(request?.method, HTTPMethod.GET)
6262
}
6363

6464
func testGetInNamespaceWithName() {
6565
let builder = RequestBuilder(config: config, gvr: gvr)
6666
var request = try? builder.in(.default).toGet().resource(withName: "test").build()
6767

68-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/default/pods/test")!)
68+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/default/pods/test")!)
6969
XCTAssertEqual(request?.method, HTTPMethod.GET)
7070

7171
request = try? builder.in(.system).toGet().build()
7272

73-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/kube-system/pods/test")!)
73+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/kube-system/pods/test")!)
7474
XCTAssertEqual(request?.method, HTTPMethod.GET)
7575
}
7676

7777
func testFollowInNamespace() {
7878
let builder = RequestBuilder(config: config, gvr: gvr)
79-
let request = try? builder.in(.system).toFollow(pod: "pod", container: "container", timestamps: false).build()
79+
let request = try? builder.in(.system).toFollow(pod: "pod", container: "container", timestamps: false, tailLines: nil).build()
8080

81-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/kube-system/pods/pod/log?follow=true&container=container")!)
81+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/kube-system/pods/pod/log?follow=true&container=container")!)
8282
XCTAssertEqual(request?.method, HTTPMethod.GET)
8383
}
8484

8585
func testFollowWithTimestampsInNamespace() {
8686
let builder = RequestBuilder(config: config, gvr: gvr)
87-
let request = try? builder.in(.system).toFollow(pod: "pod", container: "container", timestamps: true).build()
87+
let request = try? builder.in(.system).toFollow(pod: "pod", container: "container", timestamps: true, tailLines: nil).build()
8888

89-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/kube-system/pods/pod/log?follow=true&timestamps=true&container=container")!)
89+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/kube-system/pods/pod/log?follow=true&timestamps=true&container=container")!)
9090
XCTAssertEqual(request?.method, HTTPMethod.GET)
9191
}
9292

9393
func testLogsInNamespace() {
9494
let builder = RequestBuilder(config: config, gvr: gvr)
95-
let request = try? builder.in(.system).toLogs(pod: "pod", container: nil, previous: false, timestamps: false).build()
95+
let request = try? builder.in(.system).toLogs(pod: "pod", container: nil, previous: false, timestamps: false, tailLines: nil).build()
9696

97-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/kube-system/pods/pod/log")!)
97+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/kube-system/pods/pod/log")!)
9898
XCTAssertEqual(request?.method, HTTPMethod.GET)
9999
}
100100

101101
func testLogsWithContainerInNamespace() {
102102
let builder = RequestBuilder(config: config, gvr: gvr)
103-
let request = try? builder.in(.system).toLogs(pod: "pod", container: "container", previous: false, timestamps: false).build()
103+
let request = try? builder.in(.system).toLogs(pod: "pod", container: "container", previous: false, timestamps: false, tailLines: nil).build()
104104

105-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/kube-system/pods/pod/log?container=container")!)
105+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/kube-system/pods/pod/log?container=container")!)
106106
XCTAssertEqual(request?.method, HTTPMethod.GET)
107107
}
108108

109109
func testLogsWithPreviousInNamespace() {
110110
let builder = RequestBuilder(config: config, gvr: gvr)
111-
let request = try? builder.in(.system).toLogs(pod: "pod", container: nil, previous: true, timestamps: false).build()
111+
let request = try? builder.in(.system).toLogs(pod: "pod", container: nil, previous: true, timestamps: false, tailLines: nil).build()
112112

113-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/kube-system/pods/pod/log?previous=true")!)
113+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/kube-system/pods/pod/log?previous=true")!)
114114
XCTAssertEqual(request?.method, HTTPMethod.GET)
115115
}
116116

117117
func testLogsWithTimestampsInNamespace() {
118118
let builder = RequestBuilder(config: config, gvr: gvr)
119-
let request = try? builder.in(.system).toLogs(pod: "pod", container: nil, previous: false, timestamps: true).build()
119+
let request = try? builder.in(.system).toLogs(pod: "pod", container: nil, previous: false, timestamps: true, tailLines: nil).build()
120120

121-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/kube-system/pods/pod/log?timestamps=true")!)
121+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/kube-system/pods/pod/log?timestamps=true")!)
122122
XCTAssertEqual(request?.method, HTTPMethod.GET)
123123
}
124124

@@ -214,36 +214,36 @@ final class RequestBuilderTests: XCTestCase {
214214
let builder = RequestBuilder(config: config, gvr: gvr)
215215
let request = try? builder.in(.default).toGet().resource(withName: "test").subResource(.status).build()
216216

217-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/default/pods/test/status")!)
217+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/default/pods/test/status")!)
218218
XCTAssertEqual(request?.method, HTTPMethod.GET)
219219
}
220220

221221
func testGetScale() {
222222
let builder = RequestBuilder(config: config, gvr: gvr)
223223
let request = try? builder.in(.default).toGet().resource(withName: "test").subResource(.scale).build()
224224

225-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/default/pods/test/scale")!)
225+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/default/pods/test/scale")!)
226226
XCTAssertEqual(request?.method, HTTPMethod.GET)
227227
}
228228

229229
func testDeleteInNamespace() {
230230
let builder = RequestBuilder(config: config, gvr: gvr)
231231
var request = try? builder.in(.default).toDelete().resource(withName: "test").build()
232232

233-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/default/pods/test")!)
233+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/default/pods/test")!)
234234
XCTAssertEqual(request?.method, HTTPMethod.DELETE)
235235

236236
request = try? builder.in(.system).toDelete().build()
237237

238-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/kube-system/pods/test")!)
238+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/kube-system/pods/test")!)
239239
XCTAssertEqual(request?.method, HTTPMethod.DELETE)
240240
}
241241

242242
func testDeleteInAllNamespaces() {
243243
let builder = RequestBuilder(config: config, gvr: gvr)
244244
let request = try? builder.in(.allNamespaces).toDelete().build()
245245

246-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/pods")!)
246+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/pods")!)
247247
XCTAssertEqual(request?.method, HTTPMethod.DELETE)
248248
}
249249

@@ -252,7 +252,7 @@ final class RequestBuilderTests: XCTestCase {
252252
let pod = sk.pod(name: "test")
253253
let request = try? builder.in(.default).toPost().body(pod).build()
254254

255-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/default/pods")!)
255+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/default/pods")!)
256256
XCTAssertEqual(request?.method, HTTPMethod.POST)
257257
}
258258

@@ -261,7 +261,7 @@ final class RequestBuilderTests: XCTestCase {
261261
let pod = sk.pod(name: "test")
262262
let request = try? builder.in(.default).toPut().resource(withName: "test").body(.resource(payload: pod)).build()
263263

264-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/default/pods/test")!)
264+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/default/pods/test")!)
265265
XCTAssertEqual(request?.method, HTTPMethod.PUT)
266266
}
267267

@@ -270,7 +270,7 @@ final class RequestBuilderTests: XCTestCase {
270270
let pod = sk.pod(name: "test")
271271
let request = try? builder.in(.default).toPut().resource(withName: "test").body(.subResource(type: .status, payload: pod)).build()
272272

273-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/default/pods/test/status")!)
273+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/default/pods/test/status")!)
274274
XCTAssertEqual(request?.method, HTTPMethod.PUT)
275275
}
276276

@@ -279,7 +279,7 @@ final class RequestBuilderTests: XCTestCase {
279279
let pod = sk.pod(name: "test")
280280
let request = try? builder.in(.default).toPut().resource(withName: "test").body(.subResource(type: .scale, payload: pod)).build()
281281

282-
XCTAssertEqual(request?.url, URL(string: "https://kubernetesmaster/api/v1/namespaces/default/pods/test/scale")!)
282+
XCTAssertEqual(request?.url, URL(string: "https://kubernetes/master/api/v1/namespaces/default/pods/test/scale")!)
283283
XCTAssertEqual(request?.method, HTTPMethod.PUT)
284284
}
285285
}

0 commit comments

Comments
 (0)