snapshot of https://github.com/ory/keto.git (master, 2026-09-16; blobs > 131072B omitted)
Some checks failed
CI / Run lints and checks (push) Failing after 47s
CI / Run tests (push) Failing after 1s
CI / Run race tests (push) Failing after 5s
CI / Build CLI docs (push) Has been skipped
CI / Run buf actions (push) Failing after 5s
CodeQL / Analyze (go) (push) Failing after 3s
CodeQL / Analyze (javascript) (push) Failing after 2s
Docker Image Scanners / scanners (push) Failing after 3s
Format / format (push) Failing after 3s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Draft newsletter (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
Some checks failed
CI / Run lints and checks (push) Failing after 47s
CI / Run tests (push) Failing after 1s
CI / Run race tests (push) Failing after 5s
CI / Build CLI docs (push) Has been skipped
CI / Run buf actions (push) Failing after 5s
CodeQL / Analyze (go) (push) Failing after 3s
CodeQL / Analyze (javascript) (push) Failing after 2s
Docker Image Scanners / scanners (push) Failing after 3s
Format / format (push) Failing after 3s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Draft newsletter (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
This commit is contained in:
7
oryx/watcherx/integrationtest/.dockerignore
Normal file
7
oryx/watcherx/integrationtest/.dockerignore
Normal file
@@ -0,0 +1,7 @@
|
||||
event_logger.yml
|
||||
configmap.yml
|
||||
|
||||
Makefile
|
||||
README.md
|
||||
|
||||
eventlog_snapshot
|
||||
1
oryx/watcherx/integrationtest/.gitignore
vendored
Normal file
1
oryx/watcherx/integrationtest/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
tmp_snapshot
|
||||
21
oryx/watcherx/integrationtest/Dockerfile
Normal file
21
oryx/watcherx/integrationtest/Dockerfile
Normal file
@@ -0,0 +1,21 @@
|
||||
FROM golang:1.26-alpine3.23 AS builder
|
||||
|
||||
RUN apk -U --no-cache add build-base
|
||||
|
||||
WORKDIR /go/src/github.com/ory/x
|
||||
|
||||
ADD go.mod go.mod
|
||||
ADD go.sum go.sum
|
||||
|
||||
RUN go mod download
|
||||
|
||||
ADD . .
|
||||
|
||||
RUN go build -o /usr/bin/eventlogger ./watcherx/integrationtest
|
||||
|
||||
FROM alpine:3.22
|
||||
|
||||
COPY --from=builder /usr/bin/eventlogger /usr/bin/eventlogger
|
||||
|
||||
ENTRYPOINT ["eventlogger"]
|
||||
CMD ["/etc/config/mock-config"]
|
||||
65
oryx/watcherx/integrationtest/Makefile
Normal file
65
oryx/watcherx/integrationtest/Makefile
Normal file
@@ -0,0 +1,65 @@
|
||||
SHELL=/bin/bash -euo pipefail
|
||||
|
||||
CLUSTER_NAME=watcherx-integration-test
|
||||
SNAPSHOT_FILE=eventlog_snapshot
|
||||
|
||||
define generate_snapshot
|
||||
sleep 5
|
||||
make update
|
||||
sleep 1
|
||||
kubectl logs eventlogger --context kind-${CLUSTER_NAME} >> $(1)
|
||||
make apply
|
||||
sleep 1
|
||||
kubectl logs eventlogger --context kind-${CLUSTER_NAME} >> $(1)
|
||||
make update
|
||||
sleep 1
|
||||
kubectl logs eventlogger --context kind-${CLUSTER_NAME} >> $(1)
|
||||
endef
|
||||
|
||||
.PHONY: build
|
||||
build:
|
||||
docker build -f Dockerfile -t eventlogger:latest ../..
|
||||
|
||||
.PHONY: create
|
||||
create:
|
||||
kind create cluster --name ${CLUSTER_NAME} --wait 1m || true
|
||||
|
||||
.PHONY: load
|
||||
load:
|
||||
kind load docker-image eventlogger:latest --name ${CLUSTER_NAME}
|
||||
|
||||
.PHONY: apply
|
||||
apply:
|
||||
kubectl apply -f configmap.yml -f event_logger.yml --context kind-${CLUSTER_NAME}
|
||||
|
||||
.PHONY: delete
|
||||
delete:
|
||||
kind delete cluster --name ${CLUSTER_NAME}
|
||||
|
||||
.PHONY: setup
|
||||
setup: build create load apply
|
||||
|
||||
.PHONY: snapshot
|
||||
snapshot: setup container-restart
|
||||
rm ${SNAPSHOT_FILE}
|
||||
${call generate_snapshot,$(SNAPSHOT_FILE)}
|
||||
|
||||
.PHONY: check
|
||||
check: setup container-restart
|
||||
rm tmp_snapshot || true
|
||||
${call generate_snapshot,tmp_snapshot}
|
||||
diff tmp_snapshot ${SNAPSHOT_FILE}
|
||||
|
||||
.PHONY: logs
|
||||
logs:
|
||||
kubectl logs eventlogger --context kind-${CLUSTER_NAME}
|
||||
|
||||
.PHONY: container-restart
|
||||
container-restart:
|
||||
kubectl delete -f event_logger.yml --context kind-${CLUSTER_NAME}
|
||||
kubectl apply -f event_logger.yml --context kind-${CLUSTER_NAME}
|
||||
|
||||
.PHONY: update
|
||||
update:
|
||||
cat configmap.yml | sed 's/somevalue/othervalue/' | kubectl apply -f - --context kind-${CLUSTER_NAME}
|
||||
cat event_logger.yml | sed 's/somevalue/othervalue/' | kubectl apply -f - --context kind-${CLUSTER_NAME}
|
||||
27
oryx/watcherx/integrationtest/README.md
Normal file
27
oryx/watcherx/integrationtest/README.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# Integration Test for watcherx/FileWatcher
|
||||
|
||||
As kubernetes has a special way to change mounted config map values we want to
|
||||
make sure our file watcher is compatible with that.
|
||||
|
||||
## Perquisites
|
||||
|
||||
The versions are the ones that definitely work.
|
||||
|
||||
- kind (v0.8.1)
|
||||
- kubectl (v1.18.5)
|
||||
- docker (v19.03.12-ce)
|
||||
- make (v4.3)
|
||||
|
||||
## Structure
|
||||
|
||||
The `main.go` just logs all events it gets. It is deployed to a kind kubernetes
|
||||
cluster together with a configmap that gets updated during the test. For details
|
||||
on the test steps have a look at the `Makefile`.
|
||||
|
||||
## Running
|
||||
|
||||
To generate the log snapshot run `make snapshot`. That snapshot should be
|
||||
committed. To check if the FileWatcher works run `make check`. For debugging
|
||||
purposes single steps of the setup have descriptive make target names and can be
|
||||
run separately. It is safe to delete the cluster at any point or rerun snapshot
|
||||
generation.
|
||||
6
oryx/watcherx/integrationtest/configmap.yml
Normal file
6
oryx/watcherx/integrationtest/configmap.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
kind: ConfigMap
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: changing-config
|
||||
data:
|
||||
mock-config: somevalue
|
||||
19
oryx/watcherx/integrationtest/event_logger.yml
Normal file
19
oryx/watcherx/integrationtest/event_logger.yml
Normal file
@@ -0,0 +1,19 @@
|
||||
kind: Pod
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: eventlogger
|
||||
annotations:
|
||||
variant: somevalue
|
||||
spec:
|
||||
containers:
|
||||
- name: eventlogger
|
||||
image: eventlogger:latest
|
||||
imagePullPolicy: Never
|
||||
volumeMounts:
|
||||
- name: changing-config
|
||||
mountPath: /etc/config
|
||||
restartPolicy: Never
|
||||
volumes:
|
||||
- name: changing-config
|
||||
configMap:
|
||||
name: changing-config
|
||||
21
oryx/watcherx/integrationtest/eventlog_snapshot
Normal file
21
oryx/watcherx/integrationtest/eventlog_snapshot
Normal file
@@ -0,0 +1,21 @@
|
||||
watching file /etc/config/mock-config
|
||||
got change event:
|
||||
Data: othervalue,
|
||||
Src: /etc/config/mock-config
|
||||
watching file /etc/config/mock-config
|
||||
got change event:
|
||||
Data: othervalue,
|
||||
Src: /etc/config/mock-config
|
||||
got change event:
|
||||
Data: somevalue,
|
||||
Src: /etc/config/mock-config
|
||||
watching file /etc/config/mock-config
|
||||
got change event:
|
||||
Data: othervalue,
|
||||
Src: /etc/config/mock-config
|
||||
got change event:
|
||||
Data: somevalue,
|
||||
Src: /etc/config/mock-config
|
||||
got change event:
|
||||
Data: othervalue,
|
||||
Src: /etc/config/mock-config
|
||||
45
oryx/watcherx/integrationtest/main.go
Normal file
45
oryx/watcherx/integrationtest/main.go
Normal file
@@ -0,0 +1,45 @@
|
||||
// Copyright © 2023 Ory Corp
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/ory/x/watcherx"
|
||||
)
|
||||
|
||||
func main() {
|
||||
if len(os.Args) != 2 {
|
||||
_, _ = fmt.Fprintf(os.Stderr, "expected 1 comand line argument but got %d\n", len(os.Args)-1)
|
||||
os.Exit(1)
|
||||
}
|
||||
c := make(chan watcherx.Event)
|
||||
_, err := watcherx.WatchFile(context.Background(), os.Args[1], c)
|
||||
if err != nil {
|
||||
_, _ = fmt.Fprintf(os.Stderr, "could not initialize file watcher: %+v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Printf("watching file %s\n", os.Args[1])
|
||||
for {
|
||||
switch e := (<-c).(type) {
|
||||
case *watcherx.ChangeEvent:
|
||||
var data []byte
|
||||
data, err = io.ReadAll(e.Reader())
|
||||
if err != nil {
|
||||
_, _ = fmt.Fprintf(os.Stderr, "could not read data: %+v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Printf("got change event:\nData: %s,\nSrc: %s\n", data, e.Source())
|
||||
case *watcherx.RemoveEvent:
|
||||
fmt.Printf("got remove event:\nSrc: %s\n", e.Source())
|
||||
case *watcherx.ErrorEvent:
|
||||
fmt.Printf("got error event:\nError: %s\n", e.Error())
|
||||
default:
|
||||
fmt.Println("got unknown event")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user