Skip to content

Commit

Permalink
KIM integration - fixes and improvements for runtime_config query p…
Browse files Browse the repository at this point in the history
…arameter (#1104)

* initial version - test case

* first bullet fixed

* managedFields emptied

* checking error to satisfy linter
  • Loading branch information
jaroslaw-pieszka authored Sep 11, 2024
1 parent 13bd352 commit 1fa7d68
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 1 deletion.
6 changes: 5 additions & 1 deletion internal/runtime/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,10 +243,14 @@ func (h *Handler) getRuntimes(w http.ResponseWriter, req *http.Request) {
switch {
case errors.IsNotFound(err):
h.logger.Info(fmt.Sprintf("Runtime resource %s/%s: is not found: %s", dto.InstanceID, dto.RuntimeID, err.Error()))
dto.RuntimeConfig = nil
case err != nil:
h.logger.Warn(fmt.Sprintf("unable to get Runtime resource %s/%s: %s", dto.InstanceID, dto.RuntimeID, err.Error()))
dto.RuntimeConfig = nil
default:
_ = unstructured.SetNestedField(runtimeResourceObject.Object, nil, "metadata", "managedFields")
dto.RuntimeConfig = &runtimeResourceObject.Object
}
dto.RuntimeConfig = &runtimeResourceObject.Object
}

toReturn = append(toReturn, dto)
Expand Down
59 changes: 59 additions & 0 deletions internal/runtime/handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -775,6 +775,57 @@ func TestRuntimeHandler(t *testing.T) {
assert.Equal(t, "fake-region", *out.Data[0].Status.GardenerConfig.Region)
})

t.Run("test runtime_config optional attribute", func(t *testing.T) {
// given
provisionerClient := provisioner.NewFakeClient()
db := storage.NewMemoryStorage()
operations := db.Operations()
instances := db.Instances()
states := db.RuntimeStates()
archived := db.InstancesArchived()
testID := "Test1"
testTime := time.Now()
testInstance := fixInstance(testID, testTime)
testInstance.Provider = "aws"
testInstance.RuntimeID = fmt.Sprintf("runtime-%s", testID)
err := instances.Insert(testInstance)
require.NoError(t, err)

operation := fixture.FixProvisioningOperation(fixRandomID(), testID)
err = operations.InsertOperation(operation)
require.NoError(t, err)

input, err := operation.InputCreator.CreateProvisionRuntimeInput()
require.NoError(t, err)

_, err = provisionerClient.ProvisionRuntimeWithIDs(operation.GlobalAccountID, operation.SubAccountID, operation.RuntimeID, operation.ID, input)
require.NoError(t, err)

runtimeHandler := runtime.NewHandler(instances, operations, states, archived, 2, "", provisionerClient, k8sClient, kimConfig, logrus.New())

rr := httptest.NewRecorder()
router := mux.NewRouter()
runtimeHandler.AttachRoutes(router)

// when
req, err := http.NewRequest("GET", "/runtimes?runtime_config=true", nil)
require.NoError(t, err)
router.ServeHTTP(rr, req)

// then
require.Equal(t, http.StatusOK, rr.Code)

var out pkg.RuntimesPage

err = json.Unmarshal(rr.Body.Bytes(), &out)
require.NoError(t, err)

require.Equal(t, 1, out.TotalCount)
require.Equal(t, 1, out.Count)
assert.Equal(t, testID, out.Data[0].InstanceID)
require.Nil(t, out.Data[0].RuntimeConfig)
})

}

func TestRuntimeHandler_WithKimOnlyDrivenInstances(t *testing.T) {
Expand Down Expand Up @@ -1077,6 +1128,7 @@ func TestRuntimeHandler_WithKimOnlyDrivenInstances(t *testing.T) {
assert.Equal(t, testID, out.Data[0].InstanceID)
require.Nil(t, out.Data[0].Status.GardenerConfig)
require.Nil(t, out.Data[0].RuntimeConfig)

})

t.Run("test runtime_config optional attribute", func(t *testing.T) {
Expand Down Expand Up @@ -1143,6 +1195,9 @@ func TestRuntimeHandler_WithKimOnlyDrivenInstances(t *testing.T) {
assert.True(t, ok)
assert.NoError(t, err)
assert.Equal(t, "worker-0", worker)

managedFields, ok, err := unstructured.NestedSlice(*out.Data[0].RuntimeConfig, "metadata", "managedFields")
assert.Nil(t, managedFields)
})

}
Expand Down Expand Up @@ -1195,6 +1250,10 @@ func fixRuntimeResource(t *testing.T, name, namespace string) *RuntimeResourceTy
err = unstructured.SetNestedField(worker, "m6i.large", "machine", "type")
assert.NoError(t, err)

managedField := map[string]interface{}{}
err = unstructured.SetNestedSlice(runtimeResource.Object, []interface{}{managedField}, "metadata", "managedFields")
assert.NoError(t, err)

err = unstructured.SetNestedSlice(runtimeResource.Object, []interface{}{worker}, "spec", "shoot", "provider", "workers")
assert.NoError(t, err)

Expand Down

0 comments on commit 1fa7d68

Please sign in to comment.