From 79f61540b00d402c2c682d7babb10f55d03e6700 Mon Sep 17 00:00:00 2001 From: Michael Ruoss Date: Wed, 18 Jan 2023 14:38:25 +0100 Subject: [PATCH 1/5] add reliability test for concurrent tests --- test/k8s/client/runner/base_integration_test.exs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/k8s/client/runner/base_integration_test.exs b/test/k8s/client/runner/base_integration_test.exs index b9183e05..3812a3bf 100644 --- a/test/k8s/client/runner/base_integration_test.exs +++ b/test/k8s/client/runner/base_integration_test.exs @@ -352,4 +352,20 @@ defmodule K8s.Client.Runner.BaseIntegrationTest do assert {:error, error} = result assert error.message =~ "404" end + + @tag :integration + @tag :reliability + test "concurrent requests succeed", %{ + conn: conn + } do + results = + Enum.map(0..100, fn _ -> + K8s.Client.list("v1", :nodes) + |> K8s.Operation.put_query_param(:limit, 100) + |> K8s.Client.put_conn(conn) + |> K8s.Client.run() + end) + + assert Enum.all?(results, &match?({:ok, %{}}, &1)) + end end From 5757a00ab48aff736ae4310c7f3e3ffa779a6554 Mon Sep 17 00:00:00 2001 From: Michael Ruoss Date: Wed, 18 Jan 2023 14:42:44 +0100 Subject: [PATCH 2/5] add body to error log structured data. --- lib/k8s/client/mint_http_provider.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/k8s/client/mint_http_provider.ex b/lib/k8s/client/mint_http_provider.ex index 9ac3bb2b..4052a458 100644 --- a/lib/k8s/client/mint_http_provider.ex +++ b/lib/k8s/client/mint_http_provider.ex @@ -210,7 +210,8 @@ defmodule K8s.Client.MintHTTPProvider do {:error, error} -> Logger.error("The response body is supposed to be JSON but could not be decoded.", library: :k8s, - error: error + error: error, + body: body ) nil From f64760dbed6f6c04baef17132e806587dc3c2cfb Mon Sep 17 00:00:00 2001 From: Michael Ruoss Date: Wed, 18 Jan 2023 23:09:32 +0100 Subject: [PATCH 3/5] reverse buffer before sending --- lib/k8s/client/mint/request.ex | 6 +++--- test/k8s/client/runner/base_integration_test.exs | 6 ++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/k8s/client/mint/request.ex b/lib/k8s/client/mint/request.ex index d85280d3..e4ce3ce7 100644 --- a/lib/k8s/client/mint/request.ex +++ b/lib/k8s/client/mint/request.ex @@ -88,17 +88,17 @@ defmodule K8s.Client.Mint.Request do end defp send_response(%__MODULE__{stream_to: {:reply, from}, buffer: [_ | _]} = request) do - GenServer.reply(from, request.buffer) + GenServer.reply(from, Enum.reverse(request.buffer)) struct!(request, stream_to: nil, buffer: []) end defp send_response(%__MODULE__{stream_to: {pid, ref}} = request) do - Enum.each(request.buffer, &send(pid, {ref, &1})) + request.buffer |> Enum.reverse() |> Enum.each(&send(pid, {ref, &1})) struct!(request, buffer: []) end defp send_response(%__MODULE__{stream_to: pid} = request) do - Enum.each(request.buffer, &send(pid, &1)) + request.buffer |> Enum.reverse() |> Enum.each(&send(pid, &1)) struct!(request, buffer: []) end diff --git a/test/k8s/client/runner/base_integration_test.exs b/test/k8s/client/runner/base_integration_test.exs index 3812a3bf..1999d15c 100644 --- a/test/k8s/client/runner/base_integration_test.exs +++ b/test/k8s/client/runner/base_integration_test.exs @@ -355,12 +355,10 @@ defmodule K8s.Client.Runner.BaseIntegrationTest do @tag :integration @tag :reliability - test "concurrent requests succeed", %{ - conn: conn - } do + test "concurrent requests succeed", %{conn: conn} do results = Enum.map(0..100, fn _ -> - K8s.Client.list("v1", :nodes) + K8s.Client.list("v1", "pod") |> K8s.Operation.put_query_param(:limit, 100) |> K8s.Client.put_conn(conn) |> K8s.Client.run() From a101b126923cda57c252125073497c0ba4725736 Mon Sep 17 00:00:00 2001 From: Michael Ruoss Date: Wed, 18 Jan 2023 23:20:30 +0100 Subject: [PATCH 4/5] changelog --- CHANGELOG.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a833b42a..98e0d7f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + + + + + +### Fixed + +- Unable to parse response (invalid JSON) ([#215](https://github.com/coryodaniel/k8s/pull/215)) + + + ## [2.0.0-rc.5] - 2023-01-08 ### Changed @@ -40,10 +52,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [2.0.0-rc.0] - 2022-12-14 - - - - This version comes with some breaking changes. Please refer to the [migrations guide](./guides/migrations.md) for help on how to migrate your projects to this version. @@ -86,8 +94,6 @@ projects to this version. - Update `PKI.cert_from_map/2` to support fully qualified domain names (FQDN) - Fix for `K8s.Conn.from_file/1` ([#164](https://github.com/coryodaniel/k8s/pull/164)) - - ## [1.2.0] - 2022-12-07 ### Added From 33bdcdc608f7bcc109ed489120103abdaa97bb6d Mon Sep 17 00:00:00 2001 From: Michael Ruoss Date: Wed, 18 Jan 2023 23:24:15 +0100 Subject: [PATCH 5/5] run requests concurrently --- test/k8s/client/runner/base_integration_test.exs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/k8s/client/runner/base_integration_test.exs b/test/k8s/client/runner/base_integration_test.exs index 1999d15c..b3bb49bb 100644 --- a/test/k8s/client/runner/base_integration_test.exs +++ b/test/k8s/client/runner/base_integration_test.exs @@ -357,13 +357,15 @@ defmodule K8s.Client.Runner.BaseIntegrationTest do @tag :reliability test "concurrent requests succeed", %{conn: conn} do results = - Enum.map(0..100, fn _ -> + 0..100 + |> Task.async_stream(fn _ -> K8s.Client.list("v1", "pod") |> K8s.Operation.put_query_param(:limit, 100) |> K8s.Client.put_conn(conn) |> K8s.Client.run() end) + |> Enum.to_list() - assert Enum.all?(results, &match?({:ok, %{}}, &1)) + assert Enum.all?(results, &match?({:ok, {:ok, %{}}}, &1)) end end