From 73ad613b2a3fa99afba73be9c210740526f05837 Mon Sep 17 00:00:00 2001 From: dprotaso Date: Fri, 9 Feb 2024 10:43:30 -0500 Subject: [PATCH 1/2] add revision-failure test image --- .../revisionfailure/revisionfailure.go | 50 +++++++++++++++++++ test/test_images/revisionfailure/service.yaml | 28 +++++++++++ 2 files changed, 78 insertions(+) create mode 100644 test/test_images/revisionfailure/revisionfailure.go create mode 100644 test/test_images/revisionfailure/service.yaml diff --git a/test/test_images/revisionfailure/revisionfailure.go b/test/test_images/revisionfailure/revisionfailure.go new file mode 100644 index 000000000000..1ef396b66543 --- /dev/null +++ b/test/test_images/revisionfailure/revisionfailure.go @@ -0,0 +1,50 @@ +/* +Copyright 2018 The Knative Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "flag" + "fmt" + "log" + "net/http" + "os" + + "knative.dev/serving/test" +) + +func handler(w http.ResponseWriter, r *http.Request) { + log.Print("Hello world received a request.") + fmt.Fprintf(w, "Hello %v! How about some tasty noodles?", os.Getenv("NAME")) +} + +func main() { + flag.Parse() + log.Print("Hello world app started.") + + entries, err := os.ReadDir("/etc/config") + if err != nil { + log.Fatal("failed to read failure list", err) + } + + for _, e := range entries { + if e.Name() == os.Getenv("K_REVISION") { + log.Fatalf("you want me to fail") + } + } + + test.ListenAndServeGracefully(":8080", handler) +} diff --git a/test/test_images/revisionfailure/service.yaml b/test/test_images/revisionfailure/service.yaml new file mode 100644 index 000000000000..5f6bd70c0a5b --- /dev/null +++ b/test/test_images/revisionfailure/service.yaml @@ -0,0 +1,28 @@ +apiVersion: serving.knative.dev/v1 +kind: Service +metadata: + name: revision-failure + namespace: default +spec: + template: + spec: + timeoutSeconds: 30 + containers: + - image: ko://knative.dev/serving/test/test_images/revisionfailure + env: + - name: NAME + value: "$NAME" + volumeMounts: + - name: failure-list + mountPath: /etc/config + volumes: + - name: failure-list + configMap: + name: revision-failure +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: revision-failure +# data: +# revision-failure-00001: "1" From 94ad068f8603e03aad190c83ce133c39e875f75b Mon Sep 17 00:00:00 2001 From: dprotaso Date: Wed, 14 Feb 2024 14:21:59 -0500 Subject: [PATCH 2/2] allow failure of revision after start --- .../revisionfailure/revisionfailure.go | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/test/test_images/revisionfailure/revisionfailure.go b/test/test_images/revisionfailure/revisionfailure.go index 1ef396b66543..970ef5489cd7 100644 --- a/test/test_images/revisionfailure/revisionfailure.go +++ b/test/test_images/revisionfailure/revisionfailure.go @@ -1,5 +1,5 @@ /* -Copyright 2018 The Knative Authors +Copyright 2024 The Knative Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,18 +22,41 @@ import ( "log" "net/http" "os" + "time" "knative.dev/serving/test" ) -func handler(w http.ResponseWriter, r *http.Request) { +func handler(w http.ResponseWriter, _ *http.Request) { log.Print("Hello world received a request.") fmt.Fprintf(w, "Hello %v! How about some tasty noodles?", os.Getenv("NAME")) } func main() { + stop := make(chan struct{}) + flag.Parse() - log.Print("Hello world app started.") + log.Println("Hello world app started.") + + checkForFailure() + + go func() { + test.ListenAndServeGracefully(":8080", handler) + close(stop) + }() + + for { + select { + case <-time.After(5 * time.Second): + checkForFailure() + case <-stop: + return + } + } +} + +func checkForFailure() { + log.Println("Checking for failure") entries, err := os.ReadDir("/etc/config") if err != nil { @@ -45,6 +68,4 @@ func main() { log.Fatalf("you want me to fail") } } - - test.ListenAndServeGracefully(":8080", handler) }