diff --git a/.github/workflows/build-snapshots-14110.yaml b/.github/workflows/build-snapshots-14110.yaml index 29d571f6..7549eb72 100644 --- a/.github/workflows/build-snapshots-14110.yaml +++ b/.github/workflows/build-snapshots-14110.yaml @@ -23,7 +23,7 @@ jobs: fail-fast: false matrix: coherenceVersion: - - 14.1.1-0-17-SNAPSHOT + - 14.1.1-0-19-SNAPSHOT # Checkout the source, we need a depth of zero to fetch all of the history otherwise # the copyright check cannot work out the date of the files from Git. @@ -61,7 +61,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Set up JDK 11 for Verify CLI uses: actions/setup-java@v4 diff --git a/.github/workflows/build-snapshots.yaml b/.github/workflows/build-snapshots.yaml index 9aa721c1..c60b8c1b 100644 --- a/.github/workflows/build-snapshots.yaml +++ b/.github/workflows/build-snapshots.yaml @@ -23,8 +23,8 @@ jobs: fail-fast: false matrix: coherenceVersion: - - 23.09.3-SNAPSHOT - - 22.06.8-SNAPSHOT + - 24.03.2-SNAPSHOT + - 22.06.10-SNAPSHOT # Checkout the source, we need a depth of zero to fetch all of the history otherwise # the copyright check cannot work out the date of the files from Git. @@ -62,7 +62,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Verify Coherence CLI env: diff --git a/.github/workflows/build-test-create-cluster-jdk21.yaml b/.github/workflows/build-test-create-cluster-jdk21.yaml index 9dacadee..0abace55 100644 --- a/.github/workflows/build-test-create-cluster-jdk21.yaml +++ b/.github/workflows/build-test-create-cluster-jdk21.yaml @@ -21,7 +21,7 @@ jobs: fail-fast: false matrix: coherenceVersion: - - 24.03 + - 24.03.1 javaVersion: - 21 @@ -56,7 +56,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Build cohctl shell: bash diff --git a/.github/workflows/build-test-create-cluster.yaml b/.github/workflows/build-test-create-cluster.yaml index b6dc8eb0..498b09e1 100644 --- a/.github/workflows/build-test-create-cluster.yaml +++ b/.github/workflows/build-test-create-cluster.yaml @@ -21,11 +21,11 @@ jobs: fail-fast: false matrix: coherenceVersion: - - 22.06.7 - 22.06.8 - - 22.06.9-SNAPSHOT - - 24.03 - - 23.03.1-SNAPSHOT + - 22.06.9 + - 22.06.10-SNAPSHOT + - 24.03.1 + - 23.03.2-SNAPSHOT javaVersion: - 17 @@ -60,7 +60,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Build cohctl shell: bash diff --git a/.github/workflows/build-test-monitor-cluster-jdk21.yaml b/.github/workflows/build-test-monitor-cluster-jdk21.yaml index b1adaf4e..93f218d7 100644 --- a/.github/workflows/build-test-monitor-cluster-jdk21.yaml +++ b/.github/workflows/build-test-monitor-cluster-jdk21.yaml @@ -21,8 +21,8 @@ jobs: fail-fast: false matrix: coherenceVersion: - - 22.06.8 - - 24.03 + - 22.06.9 + - 24.03.1 javaVersion: - 21 @@ -57,7 +57,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Build cohctl shell: bash diff --git a/.github/workflows/build-test-monitor-health-jdk21.yaml b/.github/workflows/build-test-monitor-health-jdk21.yaml index 01bc63f2..5af916fa 100644 --- a/.github/workflows/build-test-monitor-health-jdk21.yaml +++ b/.github/workflows/build-test-monitor-health-jdk21.yaml @@ -21,8 +21,8 @@ jobs: fail-fast: false matrix: coherenceVersion: - - 22.06.8 - - 24.03 + - 22.06.9 + - 24.03.1 javaVersion: - 21 @@ -57,13 +57,13 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Build cohctl shell: bash run: make cohctl - - name: Test Monitor Cluster + - name: Test Monitor Health shell: bash run: | bin/cohctl create cluster local -v ${{ matrix.coherenceVersion }} -s active -M 2g -y diff --git a/.github/workflows/build-tls.yaml b/.github/workflows/build-tls.yaml index b40fb37b..5159f2b9 100644 --- a/.github/workflows/build-tls.yaml +++ b/.github/workflows/build-tls.yaml @@ -53,7 +53,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: TLS Tests shell: bash @@ -61,7 +61,7 @@ jobs: export COHERENCE_TLS_CERTS_PATH=`pwd`/test/test_utils/certs/guardians-ca.crt export COHERENCE_TLS_CLIENT_CERT=`pwd`/test/test_utils/certs/star-lord.crt export COHERENCE_TLS_CLIENT_KEY=`pwd`/test/test_utils/certs/star-lord.key - COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 COHERENCE_VERSION=24.03 PROFILES=,secure make clean certs build-test-images test-cluster-startup + COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 COHERENCE_VERSION=24.03.1 PROFILES=,secure make clean certs build-test-images test-cluster-startup echo "Sleeping 30..." sleep 30 export PATH=`pwd`/bin:$PATH diff --git a/.github/workflows/build-trivy.yaml b/.github/workflows/build-trivy.yaml index a4f344a6..829a1957 100644 --- a/.github/workflows/build-trivy.yaml +++ b/.github/workflows/build-trivy.yaml @@ -56,7 +56,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Trivy Scan shell: bash diff --git a/.github/workflows/build-view-cache.yaml b/.github/workflows/build-view-cache.yaml index 16923984..4fa03361 100644 --- a/.github/workflows/build-view-cache.yaml +++ b/.github/workflows/build-view-cache.yaml @@ -23,9 +23,9 @@ jobs: fail-fast: false matrix: coherenceVersion: - - 24.03.1-SNAPSHOT - - 22.06.8-SNAPSHOT - - 24.03 + - 24.03.2-SNAPSHOT + - 22.06.10-SNAPSHOT + - 24.03.1 # Checkout the source, we need a depth of zero to fetch all of the history otherwise # the copyright check cannot work out the date of the files from Git. @@ -63,7 +63,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Verify Coherence CLI View Cache env: diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 30b4f77a..9587bdae 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -53,7 +53,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Code Review shell: bash @@ -77,7 +77,7 @@ jobs: - name: E2E Local Tests shell: bash run: | - COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 PROFILES=,executor COHERENCE_VERSION=22.06.8 make clean build-test-images test-e2e-standalone + COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 PROFILES=,executor COHERENCE_VERSION=22.06.9 make clean build-test-images test-e2e-standalone - name: Discovery Tests shell: bash diff --git a/.github/workflows/compatability-tests-14110.yaml b/.github/workflows/compatability-tests-14110.yaml index 85927ae2..309209d4 100644 --- a/.github/workflows/compatability-tests-14110.yaml +++ b/.github/workflows/compatability-tests-14110.yaml @@ -21,8 +21,8 @@ jobs: fail-fast: false matrix: coherenceVersion: - - 14.1.1-0-16 - - 14.1.1-0-17-SNAPSHOT + - 14.1.1-0-18 + - 14.1.1-0-19-SNAPSHOT javaImage: - gcr.io/distroless/java:11 @@ -62,7 +62,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Compatability Tests shell: bash diff --git a/.github/workflows/compatability-tests-released-14110.yaml b/.github/workflows/compatability-tests-released-14110.yaml index 55798462..1bc599c3 100644 --- a/.github/workflows/compatability-tests-released-14110.yaml +++ b/.github/workflows/compatability-tests-released-14110.yaml @@ -21,8 +21,8 @@ jobs: fail-fast: false matrix: coherenceVersion: - - 14.1.1-0-15 - - 14.1.1-0-16 + - 14.1.1-0-17 + - 14.1.1-0-18 javaImage: - gcr.io/distroless/java11 @@ -62,7 +62,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Compatability Tests shell: bash diff --git a/.github/workflows/compatability-tests-released.yaml b/.github/workflows/compatability-tests-released.yaml index 9ec13d26..885d1ff1 100644 --- a/.github/workflows/compatability-tests-released.yaml +++ b/.github/workflows/compatability-tests-released.yaml @@ -21,11 +21,10 @@ jobs: fail-fast: false matrix: coherenceVersion: - - 24.03 - - 24.03.1-SNAPSHOT - - 22.06.7 - - 22.06.8 - - 22.06.9-SNAPSHOT + - 24.03.1 + - 24.03.2-SNAPSHOT + - 22.06.9 + - 22.06.10-SNAPSHOT javaImage: - gcr.io/distroless/java17 @@ -65,7 +64,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Compatability Tests shell: bash diff --git a/.github/workflows/compatability-tests.yaml b/.github/workflows/compatability-tests.yaml index 02daa9d1..4f917610 100644 --- a/.github/workflows/compatability-tests.yaml +++ b/.github/workflows/compatability-tests.yaml @@ -21,11 +21,10 @@ jobs: fail-fast: false matrix: coherenceVersion: - - 24.03 - - 24.03.1-SNAPSHOT - - 22.06.7 - - 22.06.8 - - 22.06.9-SNAPSHOT + - 24.03.1 + - 24.03.2-SNAPSHOT + - 22.06.9 + - 22.06.10-SNAPSHOT javaImage: - gcr.io/distroless/java17 @@ -65,7 +64,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Compatability Tests shell: bash diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 92a86c6e..d3c804ff 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,7 +31,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Code Review shell: bash @@ -52,7 +52,7 @@ jobs: - name: E2E Local Tests shell: bash - run: COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 COHERENCE_VERSION=22.06.8 make clean build-test-images test-e2e-standalone + run: COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 COHERENCE_VERSION=22.06.9 make clean build-test-images test-e2e-standalone - name: Discovery Tests shell: bash diff --git a/Makefile b/Makefile index 6dae7eb0..74f29f12 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ # ====================================================================================================================== # The version of the CLI being build - this should be a valid SemVer format -VERSION ?= 1.7.0 +VERSION ?= 1.7.1 MILESTONE ?= SHELL := /bin/bash @@ -23,7 +23,7 @@ SHELL := /bin/bash MVN_VERSION ?= 1.0.0 # Coherence CE version to run base tests against -COHERENCE_VERSION ?= 22.06.8 +COHERENCE_VERSION ?= 22.06.9 COHERENCE_GROUP_ID ?= com.oracle.coherence.ce COHERENCE_WKA1 ?= server1 COHERENCE_WKA2 ?= server1 @@ -388,7 +388,7 @@ copyright: getcopyright ## Check copyright headers # ---------------------------------------------------------------------------------------------------------------------- .PHONY: golangci golangci: $(TOOLS_BIN)/golangci-lint ## Go code review - $(TOOLS_BIN)/golangci-lint run -v --timeout=5m ./pkg/... + $(TOOLS_BIN)/golangci-lint run -v --timeout=5m --max-same-issues 20 ./pkg/... # ====================================================================================================================== # Miscellaneous targets @@ -572,7 +572,7 @@ test-clean: gotestsum ## Clean the go test cache # ---------------------------------------------------------------------------------------------------------------------- $(TOOLS_BIN)/golangci-lint: @mkdir -p $(TOOLS_BIN) - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(TOOLS_BIN) v1.52.2 + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(TOOLS_BIN) v1.59.1 # ---------------------------------------------------------------------------------------------------------------------- # Find or download gotestsum diff --git a/README.md b/README.md index fd678803..c866828e 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ curl -sL https://raw.githubusercontent.com/oracle/coherence-cli/main/scripts/ins For Windows, use the curl command below, then copy `cohctl.exe` to a directory in your PATH: ```cmd -curl -sLo cohctl.exe "https://github.com/oracle/coherence-cli/releases/download/1.6.1/cohctl-1.6.1-windows-amd64.exe" +curl -sLo cohctl.exe "https://github.com/oracle/coherence-cli/releases/download/1.7.0/cohctl-1.7.0-windows-amd64.exe" ``` > Note: Change the **amd64** to **arm** for ARM based processor in the URL above. diff --git a/docs/about/02_introduction.adoc b/docs/about/02_introduction.adoc index 22b8dd55..ffcc69cc 100644 --- a/docs/about/02_introduction.adoc +++ b/docs/about/02_introduction.adoc @@ -44,9 +44,6 @@ The CLI complements your existing Coherence management tools and allows you to: . Retrieve thread dumps and Java Flight Recordings across members . Make changes to various modifiable JMX attributes on services, caches and members -NOTE: There are *experimental* features in this release which allow you to create/ start/ stop/ scale Coherence clusters for development -purposes only. See <> for more information. - == Next Steps * <> diff --git a/docs/config/01_overview.adoc b/docs/config/01_overview.adoc index d8ed891e..aebefdd4 100644 --- a/docs/config/01_overview.adoc +++ b/docs/config/01_overview.adoc @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// - Copyright (c) 2021, 2023 Oracle and/or its affiliates. + Copyright (c) 2021, 2024 Oracle and/or its affiliates. Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. @@ -46,7 +46,14 @@ Changing how bytes values are displayed. .Get Config [link=docs/config/09_get_config.adoc] -- -Display the Config in .cohctl.yaml in a human readible format. +Display the Config in .cohctl.yaml in a human-readable format. +-- + +[CARD] +.Using Proxy Servers +[link=docs/config/20_using_proxy_servers.adoc] +-- +Configure proxy servers to access clusters. -- ==== diff --git a/docs/config/09_get_config.adoc b/docs/config/09_get_config.adoc index efe05596..caa880d6 100644 --- a/docs/config/09_get_config.adoc +++ b/docs/config/09_get_config.adoc @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// - Copyright (c) 2023, Oracle and/or its affiliates. + Copyright (c) 2023, 2024 Oracle and/or its affiliates. Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. @@ -19,11 +19,11 @@ include::../../build/_output/docs-gen/get_config.adoc[tag=text] cohctl get config ---- Output: -[source,bash] +[source,bash,subs="attributes"] ---- CONFIG ------ -Version : 1.5.0 +Version : {cli-version} Current Context : fp1 Debug : true Color : on diff --git a/docs/config/20_using_proxy_servers.adoc b/docs/config/20_using_proxy_servers.adoc new file mode 100644 index 00000000..05159def --- /dev/null +++ b/docs/config/20_using_proxy_servers.adoc @@ -0,0 +1,20 @@ +/////////////////////////////////////////////////////////////////////////////// + + Copyright (c) 2024 Oracle and/or its affiliates. + Licensed under the Universal Permissive License v 1.0 as shown at + https://oss.oracle.com/licenses/upl. + +/////////////////////////////////////////////////////////////////////////////// + += Using Proxy Servers + +== Using Proxy Servers + +There may be cases where you wish to configure a proxy server to access the HTTP endpoint for your cluster. + +The CLI honors the following standard environment variable settings, by internally using https://pkg.go.dev/net/http#ProxyFromEnvironment[Proxy.ProxyFromEnvironment], for proxy server configuration: + +* `HTTP_PROXY` or `http_proxy` +* `HTTPS_PROXY` or `https_proxy` +* `NO_PROXY` or `no_proxy` + diff --git a/docs/reference/99_monitor_clusters.adoc b/docs/reference/99_monitor_clusters.adoc index e32c2cca..e03ab693 100644 --- a/docs/reference/99_monitor_clusters.adoc +++ b/docs/reference/99_monitor_clusters.adoc @@ -13,7 +13,7 @@ === Overview Experimental command to monitor clusters with text UI to show multiple panels. -NOTE: The `monitor cluster` command is current experimental only and may be changed or removed in the future +NOTE: The `monitor cluster` command is currently experimental only and may be changed or removed in the future * <> - monitors the cluster using text based UI * <> - shows all available panels diff --git a/go.mod b/go.mod index 9ac601c6..7026dfa0 100644 --- a/go.mod +++ b/go.mod @@ -4,44 +4,46 @@ // module github.com/oracle/coherence-cli -go 1.20 +go 1.21 require ( - github.com/fatih/color v1.14.1 + github.com/fatih/color v1.17.0 github.com/gdamore/tcell/v2 v2.7.4 github.com/ohler55/ojg v1.12.8 - github.com/onsi/gomega v1.19.0 - github.com/oracle/coherence-go-client v1.2.1 - github.com/spf13/cobra v1.8.0 - github.com/spf13/viper v1.12.0 + github.com/onsi/gomega v1.33.1 + github.com/oracle/coherence-go-client v1.2.2 + github.com/spf13/cobra v1.8.1 + github.com/spf13/viper v1.19.0 go.uber.org/zap v1.27.0 - golang.org/x/term v0.18.0 + golang.org/x/term v0.19.0 golang.org/x/text v0.14.0 ) require ( - github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/gdamore/encoding v1.0.0 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect - github.com/magiconair/properties v1.8.6 // indirect + github.com/magiconair/properties v1.8.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.1 // indirect + github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/rivo/uniseg v0.4.3 // indirect - github.com/spf13/afero v1.8.2 // indirect - github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/subosito/gotenv v1.3.0 // indirect + github.com/subosito/gotenv v1.6.0 // indirect go.uber.org/multierr v1.10.0 // indirect - golang.org/x/net v0.23.0 // indirect - golang.org/x/sys v0.18.0 // indirect - gopkg.in/ini.v1 v1.66.4 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sys v0.19.0 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 0870c4d2..9efecfe1 100644 --- a/go.sum +++ b/go.sum @@ -1,537 +1,150 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= -github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= +github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell/v2 v2.7.4 h1:sg6/UnTM9jGpZU+oFYAsDahfchWAFW8Xx2yFinNSAYU= github.com/gdamore/tcell/v2 v2.7.4/go.mod h1:dSXtXTSK0VsW1biw65DZLZ2NKr7j0qP/0J7ONmsraWg= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg= +github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/ohler55/ojg v1.12.8 h1:0+OW0MXdi10gx9qUMBrOnrVzYeMw3jjQjqzIfO+DG0U= github.com/ohler55/ojg v1.12.8/go.mod h1:LBbIVRAgoFbYBXQhRhuEpaJIqq+goSO63/FQ+nyJU88= -github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= -github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/oracle/coherence-go-client v1.2.1 h1:uDMiq5JkI03zWh7sK4SapXopmedbAAHn+mlGSt5WCyY= -github.com/oracle/coherence-go-client v1.2.1/go.mod h1:8wy6v4KvDGJv6iIiCD95aU0g8UL34DaKRHs3zqQN/Bg= -github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/onsi/ginkgo/v2 v2.17.2 h1:7eMhcy3GimbsA3hEnVKdw/PQM9XN9krpKVXsZdph0/g= +github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= +github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= +github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= +github.com/oracle/coherence-go-client v1.2.2 h1:TGK87WhV8MWeCiZKk0rC+aZbt40p2nRVvxDUbF+2gX8= +github.com/oracle/coherence-go-client v1.2.2/go.mod h1:8wy6v4KvDGJv6iIiCD95aU0g8UL34DaKRHs3zqQN/Bg= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= -github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= -github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI= -github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= +golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= +golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= -gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/java/pom.xml b/java/pom.xml index d95065a5..a672988d 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -46,7 +46,7 @@ 2.2.1 1.0 2.0.0-M3 - 3.1.4 + 3.4.3 3.3.0 3.7.0 3.2.0 diff --git a/pkg/cmd/bytes_format.go b/pkg/cmd/bytes_format.go index e76d8e6e..7401bfdc 100644 --- a/pkg/cmd/bytes_format.go +++ b/pkg/cmd/bytes_format.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023 Oracle and/or its affiliates. + * Copyright (c) 2022, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -58,7 +58,7 @@ var getBytesFormatCmd = &cobra.Command{ Short: "display the current format for displaying memory or disk based sizes", Long: `The 'get bytes-format' displays the current format for displaying memory or disk based sizes.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { cmd.Printf("%s%v\n", getDefaultBytesMsg, Config.DefaultBytesFormat) return nil }, @@ -70,7 +70,7 @@ var clearBytesFormatCmd = &cobra.Command{ Short: "clear the current format for displaying memory or disk based sizes", Long: `The 'clear bytes-format' clears the current format for displaying memory or disk based sizes.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { viper.Set(defaultBytesFormatKey, "") err := WriteConfig() if err != nil { diff --git a/pkg/cmd/cache.go b/pkg/cmd/cache.go index ce242dc9..73594a2e 100644 --- a/pkg/cmd/cache.go +++ b/pkg/cmd/cache.go @@ -56,7 +56,7 @@ name is specified then all services are queried. You can specify '-o wide' to display addition information. Use '-I' to ignore internal caches such as those used by Federation.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error connection string @@ -519,7 +519,7 @@ var getViewCachesCmd = &cobra.Command{ Long: `The 'get view-caches' command displays view caches for a cluster. If no service name is specified then all services are queried.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error connection string @@ -810,7 +810,7 @@ batchFactor, refreshFactor or requeueThreshold.`, dataFetcher fetcher.Fetcher connection string err error - nodeIds []string + nodeIDs []string nodeIDArray []string confirmMessage string errorSink = createErrorSink() @@ -866,19 +866,19 @@ batchFactor, refreshFactor or requeueThreshold.`, } // validate the nodes - nodeIDArray, err = GetNodeIds(dataFetcher) + nodeIDArray, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } if nodeIDCache == all { - nodeIds = append(nodeIds, nodeIDArray...) - confirmMessage = fmt.Sprintf("all %d nodes", len(nodeIds)) + nodeIDs = append(nodeIDs, nodeIDArray...) + confirmMessage = fmt.Sprintf("all %d nodes", len(nodeIDs)) } else { - if nodeIds, err = getNodeIDs(nodeIDCache, nodeIDArray); err != nil { + if nodeIDs, err = getNodeIDs(nodeIDCache, nodeIDArray); err != nil { return err } - confirmMessage = fmt.Sprintf("%d node(s)", len(nodeIds)) + confirmMessage = fmt.Sprintf("%d node(s)", len(nodeIDs)) } cmd.Println(FormatCurrentCluster(connection)) @@ -890,10 +890,10 @@ batchFactor, refreshFactor or requeueThreshold.`, return nil } - nodeCount := len(nodeIds) + nodeCount := len(nodeIDs) wg.Add(nodeCount) - for _, value := range nodeIds { + for _, value := range nodeIDs { go func(nodeId string) { var err1 error defer wg.Done() diff --git a/pkg/cmd/cluster.go b/pkg/cmd/cluster.go index 9bbb2fcf..de1779ed 100644 --- a/pkg/cmd/cluster.go +++ b/pkg/cmd/cluster.go @@ -154,7 +154,7 @@ The 'LOCAL' column is set to 'true' if the cluster has been created using the 'cohctl create cluster' command. You can also use the '-o wide' option to see if the cluster is running.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error result []byte @@ -776,7 +776,7 @@ var ( ) const ( - defaultCoherenceVersion = "22.06.8" + defaultCoherenceVersion = "22.06.9" startClusterCommand = "start cluster" scaleClusterCommand = "scale cluster" stopClusterCommand = "stop cluster" @@ -1075,7 +1075,7 @@ var getClusterConfigCmd = &cobra.Command{ cluster using the current context or a cluster specified by using '-c'. Only available in most recent Coherence versions`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error connection string @@ -1108,7 +1108,7 @@ var getClusterDescription = &cobra.Command{ Long: `The 'get cluster-description' command displays information regarding a cluster and it's members. Only available in most recent Coherence versions.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error dataFetcher fetcher.Fetcher @@ -1218,7 +1218,7 @@ var startConsoleCmd = &cobra.Command{ Long: `The 'start console' command starts a console client which connects to a cluster using the current context or a cluster specified by using '-c'.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { return runStartClientOperation(cmd, consoleClass) }, } @@ -1230,7 +1230,7 @@ var startCohQLCmd = &cobra.Command{ Long: `The 'start cohql' command starts a CohQL client which connects to a cluster using the current context or a cluster specified by using '-c'..`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { return runStartClientOperation(cmd, cohQLClass) }, } diff --git a/pkg/cmd/cluster_test.go b/pkg/cmd/cluster_test.go index bf4ab3e4..6070496b 100644 --- a/pkg/cmd/cluster_test.go +++ b/pkg/cmd/cluster_test.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -7,60 +7,60 @@ package cmd import ( - . "github.com/onsi/gomega" + "github.com/onsi/gomega" "github.com/oracle/coherence-go-client/coherence/discovery" "os" "testing" ) func TestValidateTimeout(t *testing.T) { - g := NewGomegaWithT(t) - g.Expect(validateTimeout(1)).To(BeNil()) - g.Expect(validateTimeout(0)).To(Not(BeNil())) - g.Expect(validateTimeout(-1)).To(Not(BeNil())) + g := gomega.NewGomegaWithT(t) + g.Expect(validateTimeout(1)).To(gomega.BeNil()) + g.Expect(validateTimeout(0)).To(gomega.Not(gomega.BeNil())) + g.Expect(validateTimeout(-1)).To(gomega.Not(gomega.BeNil())) } func TestSanitizeConnectionName(t *testing.T) { - g := NewGomegaWithT(t) - g.Expect(sanitizeConnectionName("$TIM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName(",TIM ")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T'IM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T(IM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T)IM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T\"IM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T[IM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T]IM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T\\IM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T$IM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T#IM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T@IM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T/IM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T;IM")).To(Equal("TIM")) - g.Expect(sanitizeConnectionName("T!IM")).To(Equal("TIM")) + g := gomega.NewGomegaWithT(t) + g.Expect(sanitizeConnectionName("$TIM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName(",TIM ")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T'IM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T(IM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T)IM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T\"IM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T[IM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T]IM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T\\IM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T$IM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T#IM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T@IM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T/IM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T;IM")).To(gomega.Equal("TIM")) + g.Expect(sanitizeConnectionName("T!IM")).To(gomega.Equal("TIM")) } func TestFormatCluster(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) cluster := discovery.DiscoveredCluster{ClusterName: "tim", Host: "localhost", NSPort: 7574} - g.Expect(formatCluster(cluster)).To(Equal("Cluster: tim, Name Service address: localhost:7574\n")) + g.Expect(formatCluster(cluster)).To(gomega.Equal("Cluster: tim, Name Service address: localhost:7574\n")) } func TestGetMavenClasspath(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) ce = "com.oracle.coherence.ce" ) home, _ := os.UserHomeDir() path, err := getMavenClasspath(ce, "coherence", "22.06", fileTypeJar) - g.Expect(err).To(BeNil()) - g.Expect(path).To(Equal(home + "/.m2/repository/com/oracle/coherence/ce/coherence/22.06/coherence-22.06.jar")) + g.Expect(err).To(gomega.BeNil()) + g.Expect(path).To(gomega.Equal(home + "/.m2/repository/com/oracle/coherence/ce/coherence/22.06/coherence-22.06.jar")) path, err = getMavenClasspath(ce, "coherence", "22.09", fileTypeJar) - g.Expect(err).To(BeNil()) - g.Expect(path).To(Equal(home + "/.m2/repository/com/oracle/coherence/ce/coherence/22.09/coherence-22.09.jar")) + g.Expect(err).To(gomega.BeNil()) + g.Expect(path).To(gomega.Equal(home + "/.m2/repository/com/oracle/coherence/ce/coherence/22.09/coherence-22.09.jar")) path, err = getMavenClasspath(ce, "coherence", "22.09", fileTypePom) - g.Expect(err).To(BeNil()) - g.Expect(path).To(Equal(home + "/.m2/repository/com/oracle/coherence/ce/coherence/22.09/coherence-22.09.pom")) + g.Expect(err).To(gomega.BeNil()) + g.Expect(path).To(gomega.Equal(home + "/.m2/repository/com/oracle/coherence/ce/coherence/22.09/coherence-22.09.pom")) } diff --git a/pkg/cmd/color.go b/pkg/cmd/color.go index a77fee59..d226eb88 100644 --- a/pkg/cmd/color.go +++ b/pkg/cmd/color.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Oracle and/or its affiliates. + * Copyright (c) 2023, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -58,7 +58,7 @@ var getColorCmd = &cobra.Command{ Long: `The 'get color' command displays the current color formatting setting. If 'on' then formatting of output when using a terminal highlights columns requiring attention.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var color string if Config.Color == "" || Config.Color == on { color = on diff --git a/pkg/cmd/completions.go b/pkg/cmd/completions.go index 05da2966..ad54d774 100644 --- a/pkg/cmd/completions.go +++ b/pkg/cmd/completions.go @@ -200,7 +200,7 @@ func completionNodeID(_ *cobra.Command, _ []string, _ string) ([]string, cobra.S return emptySlice, cobra.ShellCompDirectiveNoFileComp } - nodeIDArray, err := GetNodeIds(dataFetcher) + nodeIDArray, err := GetClusterNodeIDs(dataFetcher) if err != nil { return emptySlice, cobra.ShellCompDirectiveNoFileComp } diff --git a/pkg/cmd/config.go b/pkg/cmd/config.go index aed79b1e..814e0182 100644 --- a/pkg/cmd/config.go +++ b/pkg/cmd/config.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Oracle and/or its affiliates. + * Copyright (c) 2023, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -18,7 +18,7 @@ var getConfigCmd = &cobra.Command{ Long: `The 'get config' command displays the config stored in the '.cohctl.yaml' config file in a human readable format.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { data, err := json.Marshal(Config) if err != nil { return err diff --git a/pkg/cmd/context.go b/pkg/cmd/context.go index 09fea173..0d5d60c5 100644 --- a/pkg/cmd/context.go +++ b/pkg/cmd/context.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -58,7 +58,7 @@ var getContextCmd = &cobra.Command{ Short: "display the current context", Long: `The 'get context' command displays the current context.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { cmd.Println(getContextMsg + Config.CurrentContext) return nil }, @@ -70,7 +70,7 @@ var clearContextCmd = &cobra.Command{ Short: "clear the current context", Long: `The 'clear context' command clears the current context for running commands in.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { return clearContext(cmd) }, } diff --git a/pkg/cmd/debug.go b/pkg/cmd/debug.go index 74c3715a..8f167f70 100644 --- a/pkg/cmd/debug.go +++ b/pkg/cmd/debug.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -61,7 +61,7 @@ var getDebugCmd = &cobra.Command{ Long: `The 'get debug' command displays the current debug level. If 'on' then additional information is logged in the log file.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var debug string if Config.Debug { debug = on diff --git a/pkg/cmd/default_heap.go b/pkg/cmd/default_heap.go index d0c32194..c263abd6 100644 --- a/pkg/cmd/default_heap.go +++ b/pkg/cmd/default_heap.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023 Oracle and/or its affiliates. + * Copyright (c) 2022, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -49,7 +49,7 @@ var getDefaultHeapCmd = &cobra.Command{ Short: "display the default heap for creating and starting clusters", Long: `The 'get default-heap' displays the default heap for creating and starting clusters.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { cmd.Printf("%s%v\n", getDefaultHeapMsg, Config.DefaultHeap) return nil }, @@ -61,7 +61,7 @@ var clearDefaultHeapCmd = &cobra.Command{ Short: "clear the current default heap for creating and starting clusters", Long: `The 'clear default-heap' clears the default heap for creating and starting clusters.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { viper.Set(defaultHeapKey, "") err := WriteConfig() if err != nil { diff --git a/pkg/cmd/elastic_data.go b/pkg/cmd/elastic_data.go index 14989469..73d9ff24 100644 --- a/pkg/cmd/elastic_data.go +++ b/pkg/cmd/elastic_data.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -40,7 +40,7 @@ var getElasticDataCmd = &cobra.Command{ Long: `The 'get elastic-data' command displays the Flash Journal and RAM Journal details for the cluster.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( dataFetcher fetcher.Fetcher finalResult string @@ -224,7 +224,7 @@ for all or specific nodes. ` + `The allowable values are ` + ram + ` or ` + flas connection string journalType = args[0] nodeIDArray []string - nodeIds []string + nodeIDs []string confirmMessage string errorSink = createErrorSink() wg sync.WaitGroup @@ -254,20 +254,20 @@ for all or specific nodes. ` + `The allowable values are ` + ram + ` or ` + flas } // validate the nodes - nodeIDArray, err = GetNodeIds(dataFetcher) + nodeIDArray, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } if nodeIDsED == all { - nodeIds = append(nodeIds, nodeIDArray...) - confirmMessage = fmt.Sprintf("all %d nodes", len(nodeIds)) + nodeIDs = append(nodeIDs, nodeIDArray...) + confirmMessage = fmt.Sprintf("all %d nodes", len(nodeIDs)) } else { - if nodeIds, err = getNodeIDs(nodeIDsED, nodeIDArray); err != nil { + if nodeIDs, err = getNodeIDs(nodeIDsED, nodeIDArray); err != nil { return err } - confirmMessage = fmt.Sprintf("%d node(s)", len(nodeIds)) + confirmMessage = fmt.Sprintf("%d node(s)", len(nodeIDs)) } cmd.Println(FormatCurrentCluster(connection)) @@ -278,9 +278,9 @@ for all or specific nodes. ` + `The allowable values are ` + ram + ` or ` + flas return nil } - wg.Add(len(nodeIds)) + wg.Add(len(nodeIDs)) - for _, value := range nodeIds { + for _, value := range nodeIDs { go func(nodeId string) { var err1 error defer wg.Done() diff --git a/pkg/cmd/environment.go b/pkg/cmd/environment.go index 92c9d6f1..30d46b2f 100644 --- a/pkg/cmd/environment.go +++ b/pkg/cmd/environment.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023 Oracle and/or its affiliates. + * Copyright (c) 2022, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -50,7 +50,7 @@ This includes details of the JVM as well as system properties.`, cmd.Println(FormatCurrentCluster(connection)) - nodeIDArray, err = GetNodeIds(dataFetcher) + nodeIDArray, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } diff --git a/pkg/cmd/executor.go b/pkg/cmd/executor.go index 70efa9db..0a254a18 100644 --- a/pkg/cmd/executor.go +++ b/pkg/cmd/executor.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -39,7 +39,7 @@ var getExecutorsCmd = &cobra.Command{ Short: "display executors for a cluster", Long: `The 'get executors' command displays the executors for a cluster.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( dataFetcher fetcher.Fetcher executorsResult []byte diff --git a/pkg/cmd/federation.go b/pkg/cmd/federation.go index 27397c57..b2812fec 100644 --- a/pkg/cmd/federation.go +++ b/pkg/cmd/federation.go @@ -331,7 +331,7 @@ service, type and participant. Specify -T to set type outgoing or incoming and - } // get all node Id's - nodeIDArray, err = GetNodeIds(dataFetcher) + nodeIDArray, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } diff --git a/pkg/cmd/formatting.go b/pkg/cmd/formatting.go index d3681fa5..524821b7 100644 --- a/pkg/cmd/formatting.go +++ b/pkg/cmd/formatting.go @@ -325,9 +325,8 @@ func FormatFederationSummary(federationSummaries []config.FederationSummary, tar return true } else if federationSummaries[p].ServiceName > federationSummaries[q].ServiceName { return false - } else { - return federationSummaries[p].ParticipantName < federationSummaries[q].ParticipantName } + return federationSummaries[p].ParticipantName < federationSummaries[q].ParticipantName }) table = newFormattedTable().WithAlignment(finalAlignment...) @@ -434,9 +433,8 @@ func FormatCacheSummary(cacheSummaries []config.CacheSummaryDetail) string { return true } else if cacheSummaries[p].ServiceName > cacheSummaries[q].ServiceName { return false - } else { - return cacheSummaries[p].CacheName < cacheSummaries[q].CacheName } + return cacheSummaries[p].CacheName < cacheSummaries[q].CacheName }) // get summary details @@ -496,9 +494,8 @@ func FormatViewCacheSummary(cacheSummaries []config.ViewCacheSummaryDetail) stri return true } else if cacheSummaries[p].ServiceName > cacheSummaries[q].ServiceName { return false - } else { - return cacheSummaries[p].ViewName < cacheSummaries[q].ViewName } + return cacheSummaries[p].ViewName < cacheSummaries[q].ViewName }) // get summary details @@ -567,9 +564,8 @@ func FormatTopicsSummary(topicDetails []config.TopicDetail) string { return true } else if topicDetails[p].ServiceName > topicDetails[q].ServiceName { return false - } else { - return topicDetails[p].TopicName < topicDetails[q].TopicName } + return topicDetails[p].TopicName < topicDetails[q].TopicName }) table := newFormattedTable().WithAlignment(L, L, R, R, R, R). @@ -2157,14 +2153,6 @@ func getFormattingFunction() func(bytesValue int64) string { return formatBytesOnly } -// maxInt returns the maximum of two values. -func max(v1 int64, v2 int64) int64 { - if v1 >= v2 { - return v1 - } - return v2 -} - // formatSmallInteger formats a small integer. func formatSmallInteger(value int32) string { return printer.Sprintf("%d", value) diff --git a/pkg/cmd/formatting_test.go b/pkg/cmd/formatting_test.go index 476fba68..474e8322 100644 --- a/pkg/cmd/formatting_test.go +++ b/pkg/cmd/formatting_test.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -8,72 +8,65 @@ package cmd import ( "fmt" - . "github.com/onsi/gomega" + "github.com/onsi/gomega" "testing" ) func TestCreateCamelCaseLabel(t *testing.T) { - g := NewGomegaWithT(t) - - g.Expect(CreateCamelCaseLabel("unicastListener")).To(Equal("Unicast Listener")) - g.Expect(CreateCamelCaseLabel("maxMemoryMB")).To(Equal("Max Memory MB")) - g.Expect(CreateCamelCaseLabel("nodeId")).To(Equal("Node Id")) - g.Expect(CreateCamelCaseLabel("UID")).To(Equal("UID")) - g.Expect(CreateCamelCaseLabel("UUID")).To(Equal("UUID")) - g.Expect(CreateCamelCaseLabel("multicastTTL")).To(Equal("Multicast TTL")) - g.Expect(CreateCamelCaseLabel("statusHA")).To(Equal("Status HA")) - g.Expect(CreateCamelCaseLabel("")).To(Equal("")) + g := gomega.NewGomegaWithT(t) + + g.Expect(CreateCamelCaseLabel("unicastListener")).To(gomega.Equal("Unicast Listener")) + g.Expect(CreateCamelCaseLabel("maxMemoryMB")).To(gomega.Equal("Max Memory MB")) + g.Expect(CreateCamelCaseLabel("nodeId")).To(gomega.Equal("Node Id")) + g.Expect(CreateCamelCaseLabel("UID")).To(gomega.Equal("UID")) + g.Expect(CreateCamelCaseLabel("UUID")).To(gomega.Equal("UUID")) + g.Expect(CreateCamelCaseLabel("multicastTTL")).To(gomega.Equal("Multicast TTL")) + g.Expect(CreateCamelCaseLabel("statusHA")).To(gomega.Equal("Status HA")) + g.Expect(CreateCamelCaseLabel("")).To(gomega.Equal("")) } func TestFormattingLatency(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) - g.Expect(formatLatency(123.333)).To(Equal("123.333ms")) - g.Expect(formatLatency(1)).To(Equal("1.000ms")) - g.Expect(formatLatency0(123)).To(Equal("123ms")) - g.Expect(formatMbps(123.2)).To(Equal("123.2Mbps")) + g.Expect(formatLatency(123.333)).To(gomega.Equal("123.333ms")) + g.Expect(formatLatency(1)).To(gomega.Equal("1.000ms")) + g.Expect(formatLatency0(123)).To(gomega.Equal("123ms")) + g.Expect(formatMbps(123.2)).To(gomega.Equal("123.2Mbps")) } func TestFormatting(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) mb int64 = 1024 * 1024 ) - g.Expect(formatBytesOnly(123)).To(Equal("123")) - g.Expect(formatBytesOnly(0)).To(Equal("0")) - g.Expect(formatKBOnly(0)).To(Equal("0 KB")) - g.Expect(formatKBOnly(1024)).To(Equal("1 KB")) - g.Expect(formatKBOnly(1000)).To(Equal("0 KB")) - g.Expect(formatKBOnly(1025)).To(Equal("1 KB")) - g.Expect(formatKBOnly(13000)).To(Equal("12 KB")) - g.Expect(formatMBOnly(0)).To(Equal("0 MB")) - g.Expect(formatMBOnly(10 * mb)).To(Equal("10 MB")) - g.Expect(formatMBOnly(10*mb - 100)).To(Equal("9 MB")) - - g.Expect(formatGBOnly(0)).To(Equal("0.0 GB")) - g.Expect(formatGBOnly(123 * mb)).To(Equal("0.1 GB")) - g.Expect(formatGBOnly(12344 * mb)).To(Equal("12.1 GB")) + g.Expect(formatBytesOnly(123)).To(gomega.Equal("123")) + g.Expect(formatBytesOnly(0)).To(gomega.Equal("0")) + g.Expect(formatKBOnly(0)).To(gomega.Equal("0 KB")) + g.Expect(formatKBOnly(1024)).To(gomega.Equal("1 KB")) + g.Expect(formatKBOnly(1000)).To(gomega.Equal("0 KB")) + g.Expect(formatKBOnly(1025)).To(gomega.Equal("1 KB")) + g.Expect(formatKBOnly(13000)).To(gomega.Equal("12 KB")) + g.Expect(formatMBOnly(0)).To(gomega.Equal("0 MB")) + g.Expect(formatMBOnly(10 * mb)).To(gomega.Equal("10 MB")) + g.Expect(formatMBOnly(10*mb - 100)).To(gomega.Equal("9 MB")) + + g.Expect(formatGBOnly(0)).To(gomega.Equal("0.0 GB")) + g.Expect(formatGBOnly(123 * mb)).To(gomega.Equal("0.1 GB")) + g.Expect(formatGBOnly(12344 * mb)).To(gomega.Equal("12.1 GB")) } -func TestMax(t *testing.T) { - g := NewGomegaWithT(t) - - g.Expect(max(123, 124)).To(Equal(int64(124))) - g.Expect(max(-1, 124)).To(Equal(int64(124))) -} - func TestFormattingPercent(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) - g.Expect(formatPercent(.5)).To(Equal("50.00%")) - g.Expect(formatPercent(-1)).To(Equal("n/a")) + g.Expect(formatPercent(.5)).To(gomega.Equal("50.00%")) + g.Expect(formatPercent(-1)).To(gomega.Equal("n/a")) } func TestFormattingAllStringsWithAlignment(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) table1 := newFormattedTable().WithAlignment(L, R, R).WithHeader("ONE", "TWO", "THREE") table1.AddRow("string", "123,200", "100MB") @@ -86,12 +79,12 @@ func TestFormattingAllStringsWithAlignment(t *testing.T) { table2.AddRow("string", "123", "10MB") fmt.Println(table2) - g.Expect(table1.String()).To(Equal(`ONE TWO THREE + g.Expect(table1.String()).To(gomega.Equal(`ONE TWO THREE string 123,200 100MB string 123 10MB `)) - g.Expect(table2.String()).To(Equal(`ONE TWO THREE + g.Expect(table2.String()).To(gomega.Equal(`ONE TWO THREE string 123,200 100MB string 123 10MB `)) @@ -99,7 +92,7 @@ string 123 10MB // TestFormattingAllStringsWithAlignmentMax1 tests truncated 1st column func TestFormattingAllStringsWithAlignmentMax1(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) table := newFormattedTable().WithAlignment(L, R, R).WithHeader("ONE", "TWO", "THREE").MaxLength(10) table.AddRow("abcdefghijh", "123,200", "100MB") @@ -107,7 +100,7 @@ func TestFormattingAllStringsWithAlignmentMax1(t *testing.T) { result := table.String() fmt.Println(result) - g.Expect(result).To(Equal(`ONE TWO THREE + g.Expect(result).To(gomega.Equal(`ONE TWO THREE abcdefg... 123,200 100MB string 123 10MB `)) @@ -115,7 +108,7 @@ string 123 10MB // TestFormattingAllStringsWithAlignmentMax2 tests all columns < max func TestFormattingAllStringsWithAlignmentMax2(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) table := newFormattedTable().WithAlignment(L, R, R).WithHeader("ONE", "TWO", "THREE").MaxLength(10) table.AddRow("123", "123,200", "100MB") @@ -123,7 +116,7 @@ func TestFormattingAllStringsWithAlignmentMax2(t *testing.T) { result := table.String() fmt.Println(result) - g.Expect(result).To(Equal(`ONE TWO THREE + g.Expect(result).To(gomega.Equal(`ONE TWO THREE 123 123,200 100MB string 123 10MB `)) @@ -131,7 +124,7 @@ string 123 10MB // TestFormattingAllStringsWithAlignmentMax3 tests all columns truncates func TestFormattingAllStringsWithAlignmentMax3(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) table := newFormattedTable().WithAlignment(L, L, L).WithHeader("ONE", "TWO", "THREE").MaxLength(10) @@ -140,7 +133,7 @@ func TestFormattingAllStringsWithAlignmentMax3(t *testing.T) { result := table.String() fmt.Println(result) - g.Expect(result).To(Equal(`ONE TWO THREE + g.Expect(result).To(gomega.Equal(`ONE TWO THREE 1this i... 1this m... 1wow ho... 2this i... 2this m... 2wow ho... `)) @@ -153,20 +146,20 @@ func TestFormatConnectionMillis(t *testing.T) { minute = second * 60 hour = minute * 60 day = hour * 24 - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) ) - g.Expect(formatConnectionMillis(999)).To(Equal("0.9s")) - g.Expect(formatConnectionMillis(10993)).To(Equal("10.9s")) - g.Expect(formatConnectionMillis(25 * minute)).To(Equal("25m 00s")) - g.Expect(formatConnectionMillis(25*minute + second)).To(Equal("25m 01s")) - g.Expect(formatConnectionMillis(12 * hour)).To(Equal("12h 00m 00s")) - g.Expect(formatConnectionMillis(12*hour + 2*minute + 1*second)).To(Equal("12h 02m 01s")) - g.Expect(formatConnectionMillis(3*day + hour)).To(Equal("3d 01h 00m 00s")) + g.Expect(formatConnectionMillis(999)).To(gomega.Equal("0.9s")) + g.Expect(formatConnectionMillis(10993)).To(gomega.Equal("10.9s")) + g.Expect(formatConnectionMillis(25 * minute)).To(gomega.Equal("25m 00s")) + g.Expect(formatConnectionMillis(25*minute + second)).To(gomega.Equal("25m 01s")) + g.Expect(formatConnectionMillis(12 * hour)).To(gomega.Equal("12h 00m 00s")) + g.Expect(formatConnectionMillis(12*hour + 2*minute + 1*second)).To(gomega.Equal("12h 02m 01s")) + g.Expect(formatConnectionMillis(3*day + hour)).To(gomega.Equal("3d 01h 00m 00s")) } func TestTableFormatting(_ *testing.T) { - //g := NewGomegaWithT(t) + //g := gomega.NewGomegaWithT(t) table := newFormattedTable(). WithHeader("ONE", "TWO", "THREE IS LONG"). WithAlignment(L, R, R) diff --git a/pkg/cmd/health.go b/pkg/cmd/health.go index 26672205..d0910083 100644 --- a/pkg/cmd/health.go +++ b/pkg/cmd/health.go @@ -37,7 +37,7 @@ var getHealthCmd = &cobra.Command{ Short: "display health information for a cluster", Long: `The 'get health' command displays the health for members of a cluster.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error dataFetcher fetcher.Fetcher @@ -184,7 +184,7 @@ var monitorHealthCmd = &cobra.Command{ Long: `The 'get monitor' command monitors the health of nodes for a cluster or set of health endpoints. Specify -n and a host:port to lookup or -e and a list of http endpoints without the path. You may also specify -T option to wait until all health endpoints are safe.`, - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error endpoints []string @@ -205,6 +205,13 @@ You may also specify -T option to wait until all health endpoints are safe.`, if err != nil { return err } + + // retrieve cluster details first so if we are connected + // to WLS or need authentication, this can be done first + _, err1 := dataFetcher.GetClusterDetailsJSON() + if err1 != nil { + return err1 + } } // retrieve the list of endpoints using either of the 3 methods diff --git a/pkg/cmd/http_server.go b/pkg/cmd/http_server.go index 62fa9182..5466bdd2 100644 --- a/pkg/cmd/http_server.go +++ b/pkg/cmd/http_server.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -23,7 +23,7 @@ var getHTTPProxiesCmd = &cobra.Command{ Short: "display http proxy services for a cluster", Long: `The 'get http-servers' command displays the list of http proxy servers for a cluster.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error dataFetcher fetcher.Fetcher diff --git a/pkg/cmd/http_session.go b/pkg/cmd/http_session.go index 2630c590..14021cdc 100644 --- a/pkg/cmd/http_session.go +++ b/pkg/cmd/http_session.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -24,7 +24,7 @@ var getHTTPSessionsCmd = &cobra.Command{ Short: "display Coherence*Web Http session information for a cluster", Long: `The 'get http-sessions' command displays Coherence*Web Http session information for a cluster.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( jsonResult string httpSessions = config.HTTPSessionSummaries{} diff --git a/pkg/cmd/ingore_certs.go b/pkg/cmd/ingore_certs.go index 514bfe1b..e3bd0fde 100644 --- a/pkg/cmd/ingore_certs.go +++ b/pkg/cmd/ingore_certs.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -29,7 +29,7 @@ var getIgnoreCertsCmd = &cobra.Command{ invalid SSL Certificates. If 'true' then invalid certificates such as self signed will be allowed. You should only use this option when you are sure of the identify of the target server.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var value string if Config.IgnoreInvalidCerts { value = stringTrue diff --git a/pkg/cmd/jfr.go b/pkg/cmd/jfr.go index 0567c301..925af6a7 100644 --- a/pkg/cmd/jfr.go +++ b/pkg/cmd/jfr.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -37,7 +37,7 @@ var getJfrsCmd = &cobra.Command{ Short: "display Java Flight Recordings for a cluster", Long: `The 'get jfrs' command displays the Java Flight Recordings for a cluster.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( dataFetcher fetcher.Fetcher connection string @@ -99,7 +99,7 @@ of 0 to make the recording continuous.`, dataFetcher fetcher.Fetcher connection string err error - nodeIds []string + nodeIDs []string jfrName = args[0] jfrType string jfrMessage string @@ -126,12 +126,12 @@ of 0 to make the recording continuous.`, return fmt.Errorf("invalid node id %s", NodeID) } - nodeIds, err = GetNodeIds(dataFetcher) + nodeIDs, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } - if !utils.SliceContains(nodeIds, NodeID) { + if !utils.SliceContains(nodeIDs, NodeID) { return fmt.Errorf("node id %s does not exist on this cluster", NodeID) } jfrMessage = "node id " + NodeID @@ -143,11 +143,11 @@ of 0 to make the recording continuous.`, } else { // must be cluster wide jfrType = fetcher.JfrTypeCluster - nodeIds, err = GetNodeIds(dataFetcher) + nodeIDs, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } - jfrMessage = fmt.Sprintf("all %d members", len(nodeIds)) + jfrMessage = fmt.Sprintf("all %d members", len(nodeIDs)) } // confirm the operation @@ -231,7 +231,7 @@ A JFR command mut be in progress for this to succeed.`, func executeJFROperation(cmd *cobra.Command, jfrName, operation string, dataFetcher fetcher.Fetcher, filename, connection string) error { var ( err error - NodeIds []string + NodeIDs []string jfrType string jfrMessage string target = "" @@ -246,12 +246,12 @@ func executeJFROperation(cmd *cobra.Command, jfrName, operation string, dataFetc return fmt.Errorf("invalid node id %s", NodeID) } - NodeIds, err = GetNodeIds(dataFetcher) + NodeIDs, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } - if !utils.SliceContains(NodeIds, NodeID) { + if !utils.SliceContains(NodeIDs, NodeID) { return fmt.Errorf("node id %s does not exist on this cluster", NodeID) } jfrMessage = "node id " + NodeID @@ -259,11 +259,11 @@ func executeJFROperation(cmd *cobra.Command, jfrName, operation string, dataFetc } else { // must be cluster wide jfrType = fetcher.JfrTypeCluster - NodeIds, err = GetNodeIds(dataFetcher) + NodeIDs, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } - jfrMessage = fmt.Sprintf("all %d members", len(NodeIds)) + jfrMessage = fmt.Sprintf("all %d members", len(NodeIDs)) } if operation != fetcher.CheckJFR && !automaticallyConfirm { diff --git a/pkg/cmd/logs.go b/pkg/cmd/logs.go index 19eca7ec..bd96857e 100644 --- a/pkg/cmd/logs.go +++ b/pkg/cmd/logs.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -18,7 +18,7 @@ var getLogsCmd = &cobra.Command{ Short: "display the current 'cohctl' log file contents", Long: `The 'get logs' command displays the current contents of the 'cohctl' log file.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { data, err := os.ReadFile(logFilePath) if err != nil { return fmt.Errorf("unable to display logfile %s: %v", logFilePath, err) diff --git a/pkg/cmd/machine.go b/pkg/cmd/machine.go index 483dd498..d00a4c6e 100644 --- a/pkg/cmd/machine.go +++ b/pkg/cmd/machine.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -25,7 +25,7 @@ var getMachinesCmd = &cobra.Command{ Short: "display machines for a cluster", Long: `The 'get machines' command displays the machines for a cluster.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( dataFetcher fetcher.Fetcher jsonData []byte diff --git a/pkg/cmd/management.go b/pkg/cmd/management.go index a6d6fd95..905526f0 100644 --- a/pkg/cmd/management.go +++ b/pkg/cmd/management.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -35,7 +35,7 @@ var getManagementCmd = &cobra.Command{ Short: "display management information for a cluster", Long: `The 'get management' command displays the management information for a cluster.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( dataFetcher fetcher.Fetcher jsonData []byte @@ -95,7 +95,7 @@ var setManagementCmd = &cobra.Command{ Long: `The 'set management' command sets a management attribute for the cluster. The following attribute names are allowed: expiryDelay and refreshPolicy.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( dataFetcher fetcher.Fetcher connection string diff --git a/pkg/cmd/member.go b/pkg/cmd/member.go index 4ac99681..f495d924 100644 --- a/pkg/cmd/member.go +++ b/pkg/cmd/member.go @@ -68,7 +68,7 @@ var getMembersCmd = &cobra.Command{ Long: `The 'get members' command displays the members for a cluster. You can specify '-o wide' to display addition information.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { return getMembers(cmd, false) }, } @@ -214,7 +214,7 @@ Only available in most recent Coherence versions.`, return err } - nodeIDArray, err = GetNodeIds(dataFetcher) + nodeIDArray, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } @@ -266,7 +266,7 @@ var getNetworkStatsCmd = &cobra.Command{ Short: "display all member network statistics for a cluster", Long: `The 'get network-stats' command displays all member network statistic for a cluster.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { return getMembers(cmd, true) }, } @@ -621,12 +621,12 @@ or loggingFormat.`, dataFetcher fetcher.Fetcher connection string err error - nodeIds []string + nodeIDs []string nodeIDArray []string confirmMessage string errorSink = createErrorSink() wg sync.WaitGroup - loggingNodeIds = args[0] + loggingNodeIDs = args[0] actualValue interface{} intValue int ) @@ -663,19 +663,19 @@ or loggingFormat.`, cmd.Println(FormatCurrentCluster(connection)) - nodeIDArray, err = GetNodeIds(dataFetcher) + nodeIDArray, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } - if loggingNodeIds == all { - nodeIds = append(nodeIds, nodeIDArray...) - confirmMessage = fmt.Sprintf("all %d nodes", len(nodeIds)) + if loggingNodeIDs == all { + nodeIDs = append(nodeIDs, nodeIDArray...) + confirmMessage = fmt.Sprintf("all %d nodes", len(nodeIDs)) } else { - if nodeIds, err = getNodeIDs(loggingNodeIds, nodeIDArray); err != nil { + if nodeIDs, err = getNodeIDs(loggingNodeIDs, nodeIDArray); err != nil { return err } - confirmMessage = fmt.Sprintf("%d node(s)", len(nodeIds)) + confirmMessage = fmt.Sprintf("%d node(s)", len(nodeIDs)) } // confirm the operation @@ -684,10 +684,10 @@ or loggingFormat.`, return nil } - nodeCount := len(nodeIds) + nodeCount := len(nodeIDs) wg.Add(nodeCount) - for _, value := range nodeIds { + for _, value := range nodeIDs { go func(nodeId string) { var err1 error defer wg.Done() @@ -717,7 +717,7 @@ var dumpClusterHeapCmd = &cobra.Command{ Long: `The 'dump cluster-heap' command issues a heap dump for all members or the selected role by using the -r flag.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { return issueClusterCommand(cmd, dumpClusterHeap) }, } @@ -729,7 +729,7 @@ var configureTracingCmd = &cobra.Command{ Long: `The 'configure tracing' command configures tracing for all members or the selected role by using the -r flag. You can specify a tracingRatio of -1 to turn off tracing.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { return issueClusterCommand(cmd, configureTracing) }, } @@ -740,7 +740,7 @@ var getTracingCmd = &cobra.Command{ Short: "display tracing for all members", Long: `The 'get tracing' command displays tracing status for all members.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( dataFetcher fetcher.Fetcher connection string @@ -799,7 +799,7 @@ var logClusterStateCmd = &cobra.Command{ Long: `The 'log cluster-state' command logs a full thread dump and outstanding polls, in the logs files, for all members or the selected role by using the -r flag.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { return issueClusterCommand(cmd, logClusterState) }, } @@ -835,7 +835,7 @@ DefaultCacheServer, then they will be restarted.`, cmd.Println(FormatCurrentCluster(connection)) - nodeIDArray, err = GetNodeIds(dataFetcher) + nodeIDArray, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } @@ -959,7 +959,7 @@ a role to retrieve thread dumps for.`, dataFetcher fetcher.Fetcher connection string err error - nodeIds []string + nodeIDs []string nodesToDump string wg sync.WaitGroup errorSink = createErrorSink() @@ -990,14 +990,14 @@ a role to retrieve thread dumps for.`, } // retrieve the nodes to validate against - nodeIDArray, err = GetNodeIds(dataFetcher) + nodeIDArray, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } // retrieve and validate the members if nodesToDump == all { - nodeIds = append(nodeIds, nodeIDArray...) + nodeIDs = append(nodeIDs, nodeIDArray...) } else { if threadDumpRole != all { // a role other than "all" has been specified so get all the nodes @@ -1014,15 +1014,15 @@ a role to retrieve thread dumps for.`, for _, member := range members.Members { if member.RoleName == threadDumpRole { - nodeIds = append(nodeIds, member.NodeID) + nodeIDs = append(nodeIDs, member.NodeID) } } - if len(nodeIds) == 0 { + if len(nodeIDs) == 0 { return fmt.Errorf("unable to find any nodes with role %s", threadDumpRole) } } else { - nodeIds = strings.Split(nodesToDump, ",") - for _, value := range nodeIds { + nodeIDs = strings.Split(nodesToDump, ",") + for _, value := range nodeIDs { if !utils.IsValidInt(value) { return fmt.Errorf(invalidNodeID, value) } @@ -1034,7 +1034,7 @@ a role to retrieve thread dumps for.`, } } - var numNodes = len(nodeIds) + var numNodes = len(nodeIDs) if numNodes >= 4 { cmd.Printf("Warning: running thread dump in parallel across %d nodes may cause excessive load.\n", @@ -1045,15 +1045,15 @@ a role to retrieve thread dumps for.`, // confirm the operation if !confirmOperation(cmd, fmt.Sprintf("Are you sure you want to retrieve %d thread dumps, each %d seconds apart for %d node(s)? (y/n) ", - numThreadDumps, delayBetweenDumps, len(nodeIds))) { + numThreadDumps, delayBetweenDumps, len(nodeIDs))) { return nil } // run the thread dump captures in parallel for each node - nodeCount := len(nodeIds) + nodeCount := len(nodeIDs) wg.Add(nodeCount) - for i, value := range nodeIds { + for i, value := range nodeIDs { go func(n string, last bool) { defer wg.Done() err1 := generateThreadDumps(n, dataFetcher, cmd, last) diff --git a/pkg/cmd/monitor_cluster.go b/pkg/cmd/monitor_cluster.go index 2f17150d..a1a192aa 100644 --- a/pkg/cmd/monitor_cluster.go +++ b/pkg/cmd/monitor_cluster.go @@ -50,7 +50,7 @@ var ( lastClusterSummaryInfo clusterSummaryInfo emptyStringArray = make([]string, 0) layoutParam string - padMaxHeightParam bool + padMaxHeightParam = true showAllPanels bool ignoreRESTErrors bool monitorCluster bool @@ -543,7 +543,7 @@ var servicesContent = func(_ fetcher.Fetcher, clusterSummary clusterSummaryInfo) return strings.Split(FormatServices(DeduplicateServices(services, "all")), "\n"), nil } -var serviceMembersContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var serviceMembersContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { var membersDetails = config.ServiceMemberDetails{} if serviceName == "" { return emptyStringArray, errSelectService @@ -562,7 +562,7 @@ var serviceMembersContent = func(dataFetcher fetcher.Fetcher, clusterSummary clu return strings.Split(FormatServiceMembers(membersDetails.Services), "\n"), nil } -var serviceDistributionsContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var serviceDistributionsContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { var ( distributionsData []byte distributions config.Distributions @@ -598,7 +598,7 @@ var serviceDistributionsContent = func(dataFetcher fetcher.Fetcher, clusterSumma return strings.Split(distributions.ScheduledDistributions, "\n"), nil } -var serviceStorageContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var serviceStorageContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { storageSummary, err := getServiceStorageDetails(dataFetcher) if err != nil { @@ -647,7 +647,7 @@ var persistenceContent = func(dataFetcher fetcher.Fetcher, clusterSummary cluste return strings.Split(FormatPersistenceServices(deDuplicatedServices, true), "\n"), nil } -var reportersContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var reportersContent = func(_ fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { var reporters = config.Reporters{} if len(clusterSummary.reportersResult) > 0 { err := json.Unmarshal(clusterSummary.reportersResult, &reporters) @@ -661,7 +661,7 @@ var reportersContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterS return []string{}, nil } -var networkStatsContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var networkStatsContent = func(_ fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { var members = config.Members{} err := json.Unmarshal(clusterSummary.membersResult, &members) @@ -672,7 +672,7 @@ var networkStatsContent = func(dataFetcher fetcher.Fetcher, clusterSummary clust return strings.Split(FormatNetworkStatistics(members.Members), "\n"), nil } -var httpSessionsContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var httpSessionsContent = func(_ fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { var httpSessions = config.HTTPSessionSummaries{} if len(clusterSummary.http) == 0 { @@ -687,7 +687,7 @@ var httpSessionsContent = func(dataFetcher fetcher.Fetcher, clusterSummary clust return strings.Split(FormatHTTPSessions(DeduplicateSessions(httpSessions), true), "\n"), nil } -var federationAllContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var federationAllContent = func(_ fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { if len(clusterSummary.finalSummariesDestinations) > 0 || len(clusterSummary.finalSummariesOrigins) > 0 { var sb strings.Builder if len(clusterSummary.finalSummariesDestinations) > 0 { @@ -703,7 +703,7 @@ var federationAllContent = func(dataFetcher fetcher.Fetcher, clusterSummary clus return []string{}, nil } -var federationDestinationsContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var federationDestinationsContent = func(_ fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { if len(clusterSummary.finalSummariesDestinations) > 0 { return strings.Split(FormatFederationSummary(clusterSummary.finalSummariesDestinations, destinations), "\n"), nil } @@ -711,7 +711,7 @@ var federationDestinationsContent = func(dataFetcher fetcher.Fetcher, clusterSum return []string{}, nil } -var federationOriginsContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var federationOriginsContent = func(_ fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { if len(clusterSummary.finalSummariesOrigins) > 0 { return strings.Split(FormatFederationSummary(clusterSummary.finalSummariesOrigins, origins), "\n"), nil } @@ -750,7 +750,7 @@ var proxiesContentInternal = func(protocol string, clusterSummary clusterSummary return strings.Split(FormatProxyServers(proxiesSummary.Proxies, protocol), "\n"), nil } -var proxyConnectionsContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var proxyConnectionsContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { if serviceName == "" { return emptyStringArray, errSelectService } @@ -763,19 +763,19 @@ var proxyConnectionsContent = func(dataFetcher fetcher.Fetcher, clusterSummary c return strings.Split(FormatProxyConnections(connectionDetailsFinal), "\n"), nil } -var cacheAccessContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var cacheAccessContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { return getCacheContent(dataFetcher, "access") } -var cacheIndexesContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var cacheIndexesContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { return getCacheContent(dataFetcher, "index") } -var cacheStorageContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var cacheStorageContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { return getCacheContent(dataFetcher, "storage") } -var cacheStoresContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var cacheStoresContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { var ( cacheStoreResult []byte cacheStoreDetails = config.CacheStoreDetails{} @@ -804,7 +804,7 @@ var cacheStoresContent = func(dataFetcher fetcher.Fetcher, clusterSummary cluste return strings.Split(FormatCacheStoreDetails(finalDetails, selectedCache, serviceName, false), "\n"), nil } -var cachePartitionContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var cachePartitionContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { return getCacheContent(dataFetcher, partitionDisplayType) } @@ -868,11 +868,11 @@ var cachesContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSumm return strings.Split(cachesData, "\n"), nil } -var topicsContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var topicsContent = func(_ fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { return strings.Split(FormatTopicsSummary(clusterSummary.topicsDetails.Details), "\n"), nil } -var topicMembersContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var topicMembersContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { var ( err error selectedDetails config.TopicDetails @@ -896,7 +896,7 @@ var topicMembersContent = func(dataFetcher fetcher.Fetcher, clusterSummary clust return strings.Split(FormatTopicsMembers(topicsMemberDetails), "\n"), nil } -var topicSubscribersContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var topicSubscribersContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { var ( err error selectedDetails config.TopicDetails @@ -920,7 +920,7 @@ var topicSubscribersContent = func(dataFetcher fetcher.Fetcher, clusterSummary c return strings.Split(FormatTopicsSubscribers(topicsSubscriberDetails), "\n"), nil } -var topicSubscriberGroupsContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var topicSubscriberGroupsContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { var ( err error selectedDetails config.TopicDetails @@ -944,7 +944,7 @@ var topicSubscriberGroupsContent = func(dataFetcher fetcher.Fetcher, clusterSumm return strings.Split(FormatTopicsSubscriberGroups(subscriberGroupDetails), "\n"), nil } -var topicSubscriberChannelsContent = func(dataFetcher fetcher.Fetcher, clusterSummary clusterSummaryInfo) ([]string, error) { +var topicSubscriberChannelsContent = func(dataFetcher fetcher.Fetcher, _ clusterSummaryInfo) ([]string, error) { var ( err error selectedDetails config.TopicDetails @@ -1206,7 +1206,7 @@ func drawHeader(screen tcell.Screen, w, h int, cluster config.Cluster, dataFetch } else if heightAdjust > 0 { height = fmt.Sprintf("+%v ", heightAdjust) } - title = fmt.Sprintf("Coherence CLI: %s - Monitoring cluster %s (%s) ESC to quit %s. %s%s(%v)", + title = fmt.Sprintf("Coherence CLI: %s - %s (%s) ESC to quit %s. %s%s(%v)", time.Now().Format(time.DateTime), cluster.ClusterName, version[0], additionalMonitorMsg, padding, height, lastDuration) } drawText(screen, 1, 0, w-1, h-1, tcell.StyleDefault.Reverse(true), title) diff --git a/pkg/cmd/persistence.go b/pkg/cmd/persistence.go index 2ab59ce3..0865b3d2 100644 --- a/pkg/cmd/persistence.go +++ b/pkg/cmd/persistence.go @@ -24,7 +24,7 @@ var getPersistenceCmd = &cobra.Command{ Short: "display persistence details for a cluster", Long: `The 'get persistence' command displays persistence information for a cluster.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error dataFetcher fetcher.Fetcher diff --git a/pkg/cmd/profile.go b/pkg/cmd/profile.go index 0eff1178..1225f11d 100644 --- a/pkg/cmd/profile.go +++ b/pkg/cmd/profile.go @@ -135,7 +135,7 @@ var getProfilesCmd = &cobra.Command{ Short: "display the profiles that have been created", Long: `The 'get profiles' displays the profiles that have been created.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { cmd.Println(FormatProfiles(Config.Profiles)) return nil }, diff --git a/pkg/cmd/proxy.go b/pkg/cmd/proxy.go index 0394f3d1..daa80222 100644 --- a/pkg/cmd/proxy.go +++ b/pkg/cmd/proxy.go @@ -32,7 +32,7 @@ var getProxiesCmd = &cobra.Command{ Long: `The 'get proxies' command displays the list of Coherence*Extend proxy servers for a cluster. You can specify '-o wide' to display addition information.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error dataFetcher fetcher.Fetcher @@ -100,9 +100,9 @@ all nodes running the proxy service as well as detailed connection information.` } // get a list of node Id's while we search for the service name - nodeIds := getProxyNodeIDs(serviceName, proxiesSummary) + nodeIDs := getProxyNodeIDs(serviceName, proxiesSummary) - if len(nodeIds) == 0 { + if len(nodeIDs) == 0 { return fmt.Errorf("%s '%s'", proxyErrorMsg, serviceName) } @@ -113,11 +113,11 @@ all nodes running the proxy service as well as detailed connection information.` } // retrieve all connection details from JSON - connectionDetails := make([]config.GenericDetails, len(nodeIds)) + connectionDetails := make([]config.GenericDetails, len(nodeIDs)) - for i := range nodeIds { + for i := range nodeIDs { connectionDetails[i] = config.GenericDetails{} - data, err := dataFetcher.GetProxyConnectionsJSON(serviceName, nodeIds[i]) + data, err := dataFetcher.GetProxyConnectionsJSON(serviceName, nodeIDs[i]) if err != nil { return err } @@ -246,17 +246,17 @@ func getProxyConnections(dataFetcher fetcher.Fetcher, proxyService string) ([]co return connectionDetailsFinal, err } - nodeIds := getProxyNodeIDs(proxyService, proxiesSummary) - nodeIdsLen := len(nodeIds) + nodeIDs := getProxyNodeIDs(proxyService, proxiesSummary) + nodeIDsLen := len(nodeIDs) - if nodeIdsLen == 0 { + if nodeIDsLen == 0 { return connectionDetailsFinal, fmt.Errorf("%s '%s'", proxyErrorMsg, proxyService) } - wg.Add(nodeIdsLen) + wg.Add(nodeIDsLen) // retrieve all connection details from JSON - for i := range nodeIds { + for i := range nodeIDs { go func(nodeID string) { defer wg.Done() connectionDetails := config.ProxyConnections{} @@ -274,7 +274,7 @@ func getProxyConnections(dataFetcher fetcher.Fetcher, proxyService string) ([]co m.Lock() defer m.Unlock() connectionDetailsFinal = append(connectionDetailsFinal, connectionDetails.Proxies...) - }(nodeIds[i]) + }(nodeIDs[i]) } // wait for the results diff --git a/pkg/cmd/reporter.go b/pkg/cmd/reporter.go index fee08b11..feba1ac7 100644 --- a/pkg/cmd/reporter.go +++ b/pkg/cmd/reporter.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -41,7 +41,7 @@ var getReportersCmd = &cobra.Command{ Short: "display reporters for a cluster", Long: `The 'get reporters' command displays the reporters for the cluster.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( dataFetcher fetcher.Fetcher connection string @@ -208,12 +208,12 @@ configFile, currentBatch, intervalSeconds or outputPath.`, dataFetcher fetcher.Fetcher connection string err error - nodeIds []string + nodeIDs []string nodeIDArray []string confirmMessage string errorSink = createErrorSink() wg sync.WaitGroup - reporterNodeIds = args[0] + reporterNodeIDs = args[0] actualValue interface{} intValue int ) @@ -247,17 +247,17 @@ configFile, currentBatch, intervalSeconds or outputPath.`, cmd.Println(FormatCurrentCluster(connection)) - nodeIDArray, err = GetNodeIds(dataFetcher) + nodeIDArray, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } - if reporterNodeIds == all { - nodeIds = append(nodeIds, nodeIDArray...) - confirmMessage = fmt.Sprintf("all %d reporter nodes", len(nodeIds)) + if reporterNodeIDs == all { + nodeIDs = append(nodeIDs, nodeIDArray...) + confirmMessage = fmt.Sprintf("all %d reporter nodes", len(nodeIDs)) } else { - nodeIds = strings.Split(reporterNodeIds, ",") - for _, value := range nodeIds { + nodeIDs = strings.Split(reporterNodeIDs, ",") + for _, value := range nodeIDs { if !utils.IsValidInt(value) { return fmt.Errorf("invalid value for reporter node id of %s", value) } @@ -266,7 +266,7 @@ configFile, currentBatch, intervalSeconds or outputPath.`, return fmt.Errorf("no node with node id %s exists in this cluster", value) } } - confirmMessage = fmt.Sprintf("%d node(s)", len(nodeIds)) + confirmMessage = fmt.Sprintf("%d node(s)", len(nodeIDs)) } // confirm the operation @@ -275,10 +275,10 @@ configFile, currentBatch, intervalSeconds or outputPath.`, return nil } - nodeCount := len(nodeIds) + nodeCount := len(nodeIDs) wg.Add(nodeCount) - for _, value := range nodeIds { + for _, value := range nodeIDs { go func(nodeId string) { var err1 error defer wg.Done() diff --git a/pkg/cmd/reset_stats.go b/pkg/cmd/reset_stats.go index 226c0376..ba362095 100644 --- a/pkg/cmd/reset_stats.go +++ b/pkg/cmd/reset_stats.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023 Oracle and/or its affiliates. + * Copyright (c) 2022, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -165,7 +165,7 @@ func issueResetStatsCommand(cmd *cobra.Command, args []string, operation string) dataFetcher fetcher.Fetcher connection string nodeIDArray []string - nodeIds []string + nodeIDs []string message string ) @@ -176,17 +176,17 @@ func issueResetStatsCommand(cmd *cobra.Command, args []string, operation string) } // validate the nodes - nodeIDArray, err = GetNodeIds(dataFetcher) + nodeIDArray, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } if resetNodeIDs == all { - nodeIds = append(nodeIds, nodeIDArray...) - confirmMessage = fmt.Sprintf("all %d nodes", len(nodeIds)) + nodeIDs = append(nodeIDs, nodeIDArray...) + confirmMessage = fmt.Sprintf("all %d nodes", len(nodeIDs)) } else { - nodeIds = strings.Split(resetNodeIDs, ",") - for _, value := range nodeIds { + nodeIDs = strings.Split(resetNodeIDs, ",") + for _, value := range nodeIDs { if !utils.IsValidInt(value) { return fmt.Errorf("invalid value for node id of %s", value) } @@ -195,7 +195,7 @@ func issueResetStatsCommand(cmd *cobra.Command, args []string, operation string) return fmt.Errorf("no node with node id %s exists in this cluster", value) } } - confirmMessage = fmt.Sprintf("%d node(s)", len(nodeIds)) + confirmMessage = fmt.Sprintf("%d node(s)", len(nodeIDs)) } cmd.Println(FormatCurrentCluster(connection)) @@ -333,9 +333,9 @@ func issueResetStatsCommand(cmd *cobra.Command, args []string, operation string) wg sync.WaitGroup ) - wg.Add(len(nodeIds)) + wg.Add(len(nodeIDs)) - for _, value := range nodeIds { + for _, value := range nodeIDs { go func(nodeId string) { var err1 error defer wg.Done() diff --git a/pkg/cmd/root_test.go b/pkg/cmd/root_test.go index b81145ff..59bdd3fb 100644 --- a/pkg/cmd/root_test.go +++ b/pkg/cmd/root_test.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -8,7 +8,7 @@ package cmd import ( "fmt" - . "github.com/onsi/gomega" + "github.com/onsi/gomega" "github.com/oracle/coherence-cli/pkg/config" "github.com/oracle/coherence-cli/pkg/fetcher" "github.com/oracle/coherence-cli/test/test_utils" @@ -26,25 +26,25 @@ const ( ) func TestVersionCommand(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) cliCmd := Initialize(nil) test_utils.EnsureCommandContains(g, t, cliCmd, cliVersion, "version") } func TestSettingConfigDirectoryOnly(t *testing.T) { cliCmd := Initialize(nil) - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) dir := test_utils.CreateTempDirectory("temp") test_utils.EnsureCommandContains(g, t, cliCmd, cliVersion, "--config-dir", dir, "version") // we should see a file in the temp directory with the name of cohctl.yaml - g.Expect(test_utils.FileExistsInDirectory(dir, configName+"."+configType)).To(Equal(true)) + g.Expect(test_utils.FileExistsInDirectory(dir, configName+"."+configType)).To(gomega.Equal(true)) } func TestSettingConfigFileOnly(t *testing.T) { cliCmd := Initialize(nil) - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) dir := test_utils.CreateTempDirectory("temp") err := os.Mkdir(dir, 0755) if err != nil { @@ -56,13 +56,13 @@ func TestSettingConfigFileOnly(t *testing.T) { test_utils.EnsureCommandContains(g, t, cliCmd, cliVersion, configOption, file, "version") // we should see a file in the temp directory with the name of cohctl.yaml - g.Expect(test_utils.FileExistsInDirectory(dir, "my-config.yaml")).To(Equal(true)) + g.Expect(test_utils.FileExistsInDirectory(dir, "my-config.yaml")).To(gomega.Equal(true)) } // TestContextCommands tests the get, set and clear context commands func TestContextCommands(t *testing.T) { cliCmd := Initialize(nil) - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) file, err := test_utils.CreateNewConfigYaml(configYaml) if err != nil { @@ -86,18 +86,18 @@ func TestContextCommands(t *testing.T) { // set the context test_utils.EnsureCommandOutputEquals(g, t, cliCmd, setContextMsg+"cluster1\n", configOption, file, "set", "context", "cluster1") - g.Expect(viper.GetString(currentContextKey)).To(Equal("cluster1")) + g.Expect(viper.GetString(currentContextKey)).To(gomega.Equal("cluster1")) // clear the context test_utils.EnsureCommandOutputEquals(g, t, cliCmd, clearContextMessage+"\n", configOption, file, "clear", "context") - g.Expect(viper.GetString(currentContextKey)).To(Equal("")) + g.Expect(viper.GetString(currentContextKey)).To(gomega.Equal("")) } // TestDebugCommands tests the get and set debug commands func TestDebugCommands(t *testing.T) { cliCmd := Initialize(nil) - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) file, err := test_utils.CreateNewConfigYaml(configYaml) if err != nil { @@ -125,7 +125,7 @@ func TestDebugCommands(t *testing.T) { // TestColoCommands tests the get and set color commands. func TestColoCommands(t *testing.T) { cliCmd := Initialize(nil) - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) file, err := test_utils.CreateNewConfigYaml(configYaml) if err != nil { @@ -155,7 +155,7 @@ func TestIgnoreCertsCommands(t *testing.T) { var ( cliCmd = Initialize(nil) - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) ignoreCerts = "ignore-certs" ) @@ -186,7 +186,7 @@ func TestIgnoreCertsCommands(t *testing.T) { // TestGetLogsCommands tests the get logs command func TestGetLogsCommands(t *testing.T) { cliCmd := Initialize(nil) - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) file, err := test_utils.CreateNewConfigYaml(configYaml) if err != nil { @@ -207,7 +207,7 @@ func TestGetLogsCommands(t *testing.T) { // TestTimeoutCommands tests the get and set timeout commands func TestTimeoutCommands(t *testing.T) { cliCmd := Initialize(nil) - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) file, err := test_utils.CreateNewConfigYaml(configYaml) if err != nil { @@ -233,27 +233,27 @@ func TestTimeoutCommands(t *testing.T) { func TestIsStatusHASaferThan(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) machineSafe = "MACHINE-SAFE" nodeSafe = "NODE-SAFE" siteSafe = "SITE-SAFE" rackSafe = "RACK-SAFE" ) - g.Expect(isStatusHASaferThan(nodeSafe, nodeSafe)).Should(Equal(true)) - g.Expect(isStatusHASaferThan(nodeSafe, machineSafe)).Should(Equal(false)) - g.Expect(isStatusHASaferThan(machineSafe, siteSafe)).Should(Equal(false)) - g.Expect(isStatusHASaferThan(rackSafe, siteSafe)).Should(Equal(false)) - g.Expect(isStatusHASaferThan(nodeSafe, "ENDANGERED")).Should(Equal(true)) - g.Expect(isStatusHASaferThan(machineSafe, nodeSafe)).Should(Equal(true)) - g.Expect(isStatusHASaferThan(rackSafe, machineSafe)).Should(Equal(true)) - g.Expect(isStatusHASaferThan(siteSafe, machineSafe)).Should(Equal(true)) - g.Expect(isStatusHASaferThan(siteSafe, rackSafe)).Should(Equal(true)) + g.Expect(isStatusHASaferThan(nodeSafe, nodeSafe)).Should(gomega.Equal(true)) + g.Expect(isStatusHASaferThan(nodeSafe, machineSafe)).Should(gomega.Equal(false)) + g.Expect(isStatusHASaferThan(machineSafe, siteSafe)).Should(gomega.Equal(false)) + g.Expect(isStatusHASaferThan(rackSafe, siteSafe)).Should(gomega.Equal(false)) + g.Expect(isStatusHASaferThan(nodeSafe, "ENDANGERED")).Should(gomega.Equal(true)) + g.Expect(isStatusHASaferThan(machineSafe, nodeSafe)).Should(gomega.Equal(true)) + g.Expect(isStatusHASaferThan(rackSafe, machineSafe)).Should(gomega.Equal(true)) + g.Expect(isStatusHASaferThan(siteSafe, machineSafe)).Should(gomega.Equal(true)) + g.Expect(isStatusHASaferThan(siteSafe, rackSafe)).Should(gomega.Equal(true)) } func TestGetDataFetcher(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) err error dataFetcher fetcher.Fetcher ok bool @@ -262,18 +262,18 @@ func TestGetDataFetcher(t *testing.T) { setConfig(g) dataFetcher, err = GetDataFetcher("one") - g.Expect(err).To(BeNil()) - g.Expect(dataFetcher).To(Not(BeNil())) + g.Expect(err).To(gomega.BeNil()) + g.Expect(dataFetcher).To(gomega.Not(gomega.BeNil())) _, ok = interface{}(dataFetcher).(fetcher.HTTPFetcher) - g.Expect(ok).To(BeTrue()) + g.Expect(ok).To(gomega.BeTrue()) _, err = GetDataFetcher("not-here") - g.Expect(err).To(Not(BeNil())) + g.Expect(err).To(gomega.Not(gomega.BeNil())) } func TestGetClusterConnection(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) found bool connection ClusterConnection ) @@ -281,20 +281,20 @@ func TestGetClusterConnection(t *testing.T) { setConfig(g) found, connection = GetClusterConnection("one") - g.Expect(found).To(Equal(true)) - g.Expect(connection.Name).To(Equal("one")) + g.Expect(found).To(gomega.Equal(true)) + g.Expect(connection.Name).To(gomega.Equal("one")) found, connection = GetClusterConnection("two") - g.Expect(found).To(Equal(true)) - g.Expect(connection.Name).To(Equal("two")) + g.Expect(found).To(gomega.Equal(true)) + g.Expect(connection.Name).To(gomega.Equal("two")) found, connection = GetClusterConnection("three") - g.Expect(found).To(Equal(false)) + g.Expect(found).To(gomega.Equal(false)) } func TestGetConnectionNameFromContextOrArg(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) err error cluster string ) @@ -305,33 +305,33 @@ func TestGetConnectionNameFromContextOrArg(t *testing.T) { Config.CurrentContext = "" clusterConnection = "local" cluster, err = GetConnectionNameFromContextOrArg() - g.Expect(err).To(BeNil()) - g.Expect(cluster).To(Equal("local")) + g.Expect(err).To(gomega.BeNil()) + g.Expect(cluster).To(gomega.Equal("local")) // test with -c local and context set to "context". -c should win Config.CurrentContext = "context" cluster, err = GetConnectionNameFromContextOrArg() - g.Expect(err).To(BeNil()) - g.Expect(cluster).To(Equal("local")) + g.Expect(err).To(gomega.BeNil()) + g.Expect(cluster).To(gomega.Equal("local")) // test with no -c and the context Config.CurrentContext = "local" clusterConnection = "" cluster, err = GetConnectionNameFromContextOrArg() - g.Expect(err).To(BeNil()) - g.Expect(cluster).To(Equal("local")) + g.Expect(err).To(gomega.BeNil()) + g.Expect(cluster).To(gomega.Equal("local")) // test with neither -c or context // test with no -c and the context Config.CurrentContext = "" clusterConnection = "" _, err = GetConnectionNameFromContextOrArg() - g.Expect(err).To(Not(BeNil())) + g.Expect(err).To(gomega.Not(gomega.BeNil())) } func TestDeduplicateServices(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) servicesSummary = config.ServicesSummaries{} ) @@ -341,15 +341,15 @@ func TestDeduplicateServices(t *testing.T) { servicesSummary.Services = append(services1, services2...) result := DeduplicateServices(servicesSummary, "all") - g.Expect(len(result)).To(Equal(2)) + g.Expect(len(result)).To(gomega.Equal(2)) result = DeduplicateServices(servicesSummary, "FederatedCache") - g.Expect(len(result)).To(Equal(1)) + g.Expect(len(result)).To(gomega.Equal(1)) } func TestDeduplicateSessions(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) summaries = config.HTTPSessionSummaries{} ) @@ -359,33 +359,33 @@ func TestDeduplicateSessions(t *testing.T) { summaries.HTTPSessions = append(session1, session2...) result := DeduplicateSessions(summaries) - g.Expect(len(result)).To(Equal(2)) + g.Expect(len(result)).To(gomega.Equal(2)) for _, value := range result { if value.AppID == "app1" { - g.Expect(value.SessionUpdates).To(Equal(int64(3))) - g.Expect(value.ReapedSessionsTotal).To(Equal(int64(30))) - g.Expect(value.SessionAverageSize).To(Equal(int32(100))) - g.Expect(value.AverageReapDuration).To(Equal(int64(100))) + g.Expect(value.SessionUpdates).To(gomega.Equal(int64(3))) + g.Expect(value.ReapedSessionsTotal).To(gomega.Equal(int64(30))) + g.Expect(value.SessionAverageSize).To(gomega.Equal(int32(100))) + g.Expect(value.AverageReapDuration).To(gomega.Equal(int64(100))) } else if value.AppID == "app2" { - g.Expect(value.SessionUpdates).To(Equal(int64(1))) - g.Expect(value.ReapedSessionsTotal).To(Equal(int64(10))) - g.Expect(value.SessionAverageSize).To(Equal(int32(100))) - g.Expect(value.AverageReapDuration).To(Equal(int64(100))) + g.Expect(value.SessionUpdates).To(gomega.Equal(int64(1))) + g.Expect(value.ReapedSessionsTotal).To(gomega.Equal(int64(10))) + g.Expect(value.SessionAverageSize).To(gomega.Equal(int32(100))) + g.Expect(value.AverageReapDuration).To(gomega.Equal(int64(100))) } } } -func setConfig(g *WithT) { +func setConfig(g *gomega.WithT) { Config.Clusters = make([]ClusterConnection, 0) Config.Clusters = append(Config.Clusters, ClusterConnection{Name: "one", ConnectionType: "http", ConnectionURL: "url-one"}) Config.Clusters = append(Config.Clusters, ClusterConnection{Name: "two", ConnectionType: "http", ConnectionURL: "url-two"}) - g.Expect(len(Config.Clusters)).To(Equal(2)) + g.Expect(len(Config.Clusters)).To(gomega.Equal(2)) } func TestErrorSink(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) errorCount = 10000 wg sync.WaitGroup errorSink = createErrorSink() @@ -401,7 +401,7 @@ func TestErrorSink(t *testing.T) { wg.Wait() errorList := errorSink.GetErrors() - g.Expect(len(errorList)).To(Equal(errorCount)) + g.Expect(len(errorList)).To(gomega.Equal(errorCount)) // check to see that we have the data we expect valuesMap := make(map[string]string) @@ -414,12 +414,12 @@ func TestErrorSink(t *testing.T) { } // ensure we have the exact number of unique values - g.Expect(len(valuesMap)).To(Equal(len(errorList))) + g.Expect(len(valuesMap)).To(gomega.Equal(len(errorList))) } func TestDeduplicatePersistenceServices(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) servicesSummary = config.ServicesSummaries{} ) @@ -430,20 +430,20 @@ func TestDeduplicatePersistenceServices(t *testing.T) { servicesSummary.Services = append(services1, services2...) servicesSummary.Services = append(servicesSummary.Services, services3...) result := DeduplicatePersistenceServices(servicesSummary) - g.Expect(len(result)).To(Equal(2)) + g.Expect(len(result)).To(gomega.Equal(2)) for _, value := range result { if value.ServiceName == "DistributedCache1" { - g.Expect(value.PersistenceActiveSpaceUsed).To(Equal(int64(30))) - g.Expect(value.PersistenceBackupSpaceUsed).To(Equal(int64(15))) - g.Expect(value.PersistenceLatencyAverageTotal).To(Equal(1.0)) - g.Expect(value.PersistenceLatencyMax).To(Equal(int64(3))) + g.Expect(value.PersistenceActiveSpaceUsed).To(gomega.Equal(int64(30))) + g.Expect(value.PersistenceBackupSpaceUsed).To(gomega.Equal(int64(15))) + g.Expect(value.PersistenceLatencyAverageTotal).To(gomega.Equal(1.0)) + g.Expect(value.PersistenceLatencyMax).To(gomega.Equal(int64(3))) } else { // federated - g.Expect(value.PersistenceActiveSpaceUsed).To(Equal(int64(10))) - g.Expect(value.PersistenceBackupSpaceUsed).To(Equal(int64(5))) - g.Expect(value.PersistenceLatencyAverageTotal).To(Equal(1.0)) - g.Expect(value.PersistenceLatencyMax).To(Equal(int64(1))) + g.Expect(value.PersistenceActiveSpaceUsed).To(gomega.Equal(int64(10))) + g.Expect(value.PersistenceBackupSpaceUsed).To(gomega.Equal(int64(5))) + g.Expect(value.PersistenceLatencyAverageTotal).To(gomega.Equal(1.0)) + g.Expect(value.PersistenceLatencyMax).To(gomega.Equal(int64(1))) } } diff --git a/pkg/cmd/service.go b/pkg/cmd/service.go index 7d238017..c647d50c 100644 --- a/pkg/cmd/service.go +++ b/pkg/cmd/service.go @@ -55,7 +55,7 @@ var getServicesCmd = &cobra.Command{ You may specify the service type as well a status-ha value to wait for. You can also specify '-o wide' to display addition information.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error statusHAValues []string @@ -132,17 +132,17 @@ can also specify '-o wide' to display addition information.`, if statusHAType != "none" { elapsedSeconds := int32(time.Since(startTime).Seconds()) if len(statusHAValues) == 1 && isStatusHASaferThan(statusHAValues[0], statusHAType) { - cmd.Printf("Status HA value of %s or better reached in %d seconds for all service types of %s\n", + cmd.Printf("Status HA value of %s or better reached in %d seconds for service types of '%s'\n", statusHAType, elapsedSeconds, serviceType) return nil } if elapsedSeconds > statusHATimeout { - return fmt.Errorf("status HA value of %s or better NOT reached in %d seconds for all service types of %s", + return fmt.Errorf("status HA value of %s or better NOT reached in %d seconds for service types of '%s'", statusHAType, elapsedSeconds, serviceType) } - cmd.Printf("Waiting for Status HA value %s or better for all service type %s within %d seconds", + cmd.Printf("Waiting for Status HA value %s or better for service type '%s' within %d seconds", statusHAType, serviceType, statusHATimeout) } @@ -161,7 +161,7 @@ var getServiceStorageCmd = &cobra.Command{ Long: `The 'get service-storage' command displays partitioned services storage for a cluster including information regarding partition sizes.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error dataFetcher fetcher.Fetcher @@ -845,7 +845,7 @@ taskHungThresholdMillis or requestTimeoutMillis.`, dataFetcher fetcher.Fetcher connection string nodeIDArray []string - nodeIds []string + nodeIDs []string confirmMessage string intValue int errorSink = createErrorSink() @@ -895,19 +895,19 @@ taskHungThresholdMillis or requestTimeoutMillis.`, } // validate the nodes - nodeIDArray, err = GetNodeIds(dataFetcher) + nodeIDArray, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } if nodeIDService == all { - nodeIds = append(nodeIds, nodeIDArray...) - confirmMessage = fmt.Sprintf("all %d nodes", len(nodeIds)) + nodeIDs = append(nodeIDs, nodeIDArray...) + confirmMessage = fmt.Sprintf("all %d nodes", len(nodeIDs)) } else { - if nodeIds, err = getNodeIDs(nodeIDService, nodeIDArray); err != nil { + if nodeIDs, err = getNodeIDs(nodeIDService, nodeIDArray); err != nil { return err } - confirmMessage = fmt.Sprintf("%d node(s)", len(nodeIds)) + confirmMessage = fmt.Sprintf("%d node(s)", len(nodeIDs)) } cmd.Println(FormatCurrentCluster(connection)) @@ -919,9 +919,9 @@ taskHungThresholdMillis or requestTimeoutMillis.`, return nil } - wg.Add(len(nodeIds)) + wg.Add(len(nodeIDs)) - for _, value := range nodeIds { + for _, value := range nodeIDs { go func(nodeId string) { var err1 error defer wg.Done() @@ -1065,7 +1065,7 @@ func issueServiceNodeCommand(cmd *cobra.Command, serviceName, operation string) } // validate the nodes - nodeIDArray, err = GetNodeIds(dataFetcher) + nodeIDArray, err = GetClusterNodeIDs(dataFetcher) if err != nil { return err } diff --git a/pkg/cmd/snapshot.go b/pkg/cmd/snapshot.go index bf9f029f..3d0321d5 100644 --- a/pkg/cmd/snapshot.go +++ b/pkg/cmd/snapshot.go @@ -60,7 +60,7 @@ var getSnapshotsCmd = &cobra.Command{ no service name is specified then all services are queried. By default local snapshots are shown, but you can use the -a option to show archived snapshots.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error connection string diff --git a/pkg/cmd/timeout.go b/pkg/cmd/timeout.go index 15df0830..27d1cffe 100644 --- a/pkg/cmd/timeout.go +++ b/pkg/cmd/timeout.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -50,7 +50,7 @@ var getTimeoutCmd = &cobra.Command{ Short: "display the current request timeout", Long: `The 'get timeout' command displays the current request timeout (in seconds) for any HTTP requests.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { cmd.Printf("%s%v\n", getTimeoutMessage, Config.RequestTimeout) return nil }, diff --git a/pkg/cmd/topics.go b/pkg/cmd/topics.go index 3b16881a..52661e7a 100644 --- a/pkg/cmd/topics.go +++ b/pkg/cmd/topics.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -42,7 +42,7 @@ var getTopicsCmd = &cobra.Command{ Short: "display topics for a cluster", Long: `The 'get topics' command displays topics for a cluster.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { var ( err error connection string diff --git a/pkg/cmd/use-gradle.go b/pkg/cmd/use-gradle.go index be60be47..50360364 100644 --- a/pkg/cmd/use-gradle.go +++ b/pkg/cmd/use-gradle.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023 Oracle and/or its affiliates. + * Copyright (c) 2022, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -58,7 +58,7 @@ var getUseGradleCmd = &cobra.Command{ Long: `The 'get use-gradle' command displays the current setting for whether to use gradle for dependency management. If set to false, the default of Maven is used.`, Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { cmd.Printf("%s%v\n", getUseGradleMsg, Config.UseGradle) return nil }, diff --git a/pkg/cmd/utils.go b/pkg/cmd/utils.go index d2f55ecb..2ac79072 100644 --- a/pkg/cmd/utils.go +++ b/pkg/cmd/utils.go @@ -427,8 +427,8 @@ func IssueFederationCommand(cmd *cobra.Command, serviceName, command, participan return nil } -// GetNodeIds returns the node ids for the current cluster. -func GetNodeIds(dataFetcher fetcher.Fetcher) ([]string, error) { +// GetClusterNodeIDs returns the node ids for the current cluster. +func GetClusterNodeIDs(dataFetcher fetcher.Fetcher) ([]string, error) { var ( members = config.Members{} membersResult []byte @@ -505,31 +505,22 @@ func (b *ByteArraySink) AppendByteArray(bytes []byte) { // GetURLContents returns the contents at the given url as a []byte. func GetURLContents(resourceURL string) ([]byte, error) { var ( - err error - req *http.Request - resp *http.Response - body []byte - buffer bytes.Buffer - URL = url.URL{} - httpProxy = os.Getenv("HTTP_PROXY") + err error + req *http.Request + resp *http.Response + body []byte + buffer bytes.Buffer ) cookies, _ := cookiejar.New(nil) tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: false, MinVersion: tls.VersionTLS12}, - } - - if httpProxy != "" { - proxy, err := URL.Parse(httpProxy) - if err != nil { - return body, errors.New("unable to parse HTTP_PROXY environment variable") - } - tr.Proxy = http.ProxyURL(proxy) + Proxy: http.ProxyFromEnvironment, } client := &http.Client{Transport: tr, Timeout: time.Duration(fetcher.RequestTimeout) * time.Second, Jar: cookies, - CheckRedirect: func(req *http.Request, via []*http.Request) error { + CheckRedirect: func(_ *http.Request, _ []*http.Request) error { return http.ErrUseLastResponse }} diff --git a/pkg/cmd/utils_test.go b/pkg/cmd/utils_test.go index d1f91300..6e19ab39 100644 --- a/pkg/cmd/utils_test.go +++ b/pkg/cmd/utils_test.go @@ -7,7 +7,7 @@ package cmd import ( - . "github.com/onsi/gomega" + "github.com/onsi/gomega" "github.com/oracle/coherence-cli/pkg/config" "testing" ) @@ -15,7 +15,7 @@ import ( func TestDecodeMemberDetails(t *testing.T) { var ( result []config.DepartedMembers - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) invalid1 = []string{"rubbish"} invalid2 = []string{"Id=4, Timestamp=2024-03-26 08:11:00.537, Address=127.0.0.1:50250, MachineId=10131, Location=machine:localhost,process:6601,member:storage-4, Role=CoherenceServer)"} invalid3 = []string{"MemberId=4, Timestamp=2024-03-26 08:11:00.537, Address=127.0.0.1:50250, MachineId=10131, Location=machine:localhost,process:6601,member:storage-4, Role=CoherenceServer)"} @@ -26,68 +26,68 @@ func TestDecodeMemberDetails(t *testing.T) { ) _, err := decodeDepartedMembers(invalid1) - g.Expect(err).To(HaveOccurred()) + g.Expect(err).To(gomega.HaveOccurred()) _, err = decodeDepartedMembers(invalid2) - g.Expect(err).To(HaveOccurred()) + g.Expect(err).To(gomega.HaveOccurred()) _, err = decodeDepartedMembers(invalid3) - g.Expect(err).To(HaveOccurred()) + g.Expect(err).To(gomega.HaveOccurred()) result, err = decodeDepartedMembers(valid1) - g.Expect(err).To(Not(HaveOccurred())) - g.Expect(result).To(Not(BeNil())) - g.Expect(len(result)).To(Equal(1)) - g.Expect(result[0].NodeID).To(Equal("4")) - g.Expect(result[0].TimeStamp).To(Equal("2024-03-26 08:11:00.537")) - g.Expect(result[0].Address).To(Equal("127.0.0.1:50250")) - g.Expect(result[0].MachineID).To(Equal("10131")) - g.Expect(result[0].Location).To(Equal("machine:localhost,process:6601,member:storage-4")) - g.Expect(result[0].Role).To(Equal("CoherenceServer")) + g.Expect(err).To(gomega.Not(gomega.HaveOccurred())) + g.Expect(result).To(gomega.Not(gomega.BeNil())) + g.Expect(len(result)).To(gomega.Equal(1)) + g.Expect(result[0].NodeID).To(gomega.Equal("4")) + g.Expect(result[0].TimeStamp).To(gomega.Equal("2024-03-26 08:11:00.537")) + g.Expect(result[0].Address).To(gomega.Equal("127.0.0.1:50250")) + g.Expect(result[0].MachineID).To(gomega.Equal("10131")) + g.Expect(result[0].Location).To(gomega.Equal("machine:localhost,process:6601,member:storage-4")) + g.Expect(result[0].Role).To(gomega.Equal("CoherenceServer")) result, err = decodeDepartedMembers(valid2) - g.Expect(err).To(Not(HaveOccurred())) - g.Expect(result).To(Not(BeNil())) - g.Expect(len(result)).To(Equal(2)) - g.Expect(result[0].NodeID).To(Equal("4")) - g.Expect(result[0].TimeStamp).To(Equal("2024-03-26 08:11:00.537")) - g.Expect(result[0].Address).To(Equal("127.0.0.1:50250")) - g.Expect(result[0].MachineID).To(Equal("10131")) - g.Expect(result[0].Location).To(Equal("machine:localhost,process:6601,member:storage-4")) - g.Expect(result[0].Role).To(Equal("CoherenceServer")) + g.Expect(err).To(gomega.Not(gomega.HaveOccurred())) + g.Expect(result).To(gomega.Not(gomega.BeNil())) + g.Expect(len(result)).To(gomega.Equal(2)) + g.Expect(result[0].NodeID).To(gomega.Equal("4")) + g.Expect(result[0].TimeStamp).To(gomega.Equal("2024-03-26 08:11:00.537")) + g.Expect(result[0].Address).To(gomega.Equal("127.0.0.1:50250")) + g.Expect(result[0].MachineID).To(gomega.Equal("10131")) + g.Expect(result[0].Location).To(gomega.Equal("machine:localhost,process:6601,member:storage-4")) + g.Expect(result[0].Role).To(gomega.Equal("CoherenceServer")) - g.Expect(result[1].NodeID).To(Equal("3")) - g.Expect(result[1].TimeStamp).To(Equal("2024-03-26 08:11:00.536")) - g.Expect(result[1].Address).To(Equal("127.0.0.1:50259")) - g.Expect(result[1].MachineID).To(Equal("10135")) - g.Expect(result[1].Location).To(Equal("machine:localhost,process:6601,member:storage-5")) - g.Expect(result[1].Role).To(Equal("CoherenceServer1")) + g.Expect(result[1].NodeID).To(gomega.Equal("3")) + g.Expect(result[1].TimeStamp).To(gomega.Equal("2024-03-26 08:11:00.536")) + g.Expect(result[1].Address).To(gomega.Equal("127.0.0.1:50259")) + g.Expect(result[1].MachineID).To(gomega.Equal("10135")) + g.Expect(result[1].Location).To(gomega.Equal("machine:localhost,process:6601,member:storage-5")) + g.Expect(result[1].Role).To(gomega.Equal("CoherenceServer1")) } func TestParseHealthEndpoints(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) _, err := parseHealthEndpoints("") - g.Expect(err).To(Not(HaveOccurred())) // special empty case + g.Expect(err).To(gomega.Not(gomega.HaveOccurred())) // special empty case _, err = parseHealthEndpoints("rubbish") - g.Expect(err).To(HaveOccurred()) + g.Expect(err).To(gomega.HaveOccurred()) values, err := parseHealthEndpoints("http://127.0.0.1:7767") - g.Expect(err).To(Not(HaveOccurred())) - g.Expect(len(values)).To(Equal(1)) - g.Expect(values).To(Equal([]string{"http://127.0.0.1:7767"})) + g.Expect(err).To(gomega.Not(gomega.HaveOccurred())) + g.Expect(len(values)).To(gomega.Equal(1)) + g.Expect(values).To(gomega.Equal([]string{"http://127.0.0.1:7767"})) _, err = parseHealthEndpoints("http://127.0.0.1:7767,3333") - g.Expect(err).To(HaveOccurred()) + g.Expect(err).To(gomega.HaveOccurred()) values, err = parseHealthEndpoints("http://127.0.0.1:7767,http://127.0.0.1:7768") - g.Expect(err).To(Not(HaveOccurred())) - g.Expect(len(values)).To(Equal(2)) - g.Expect(values).To(Equal([]string{"http://127.0.0.1:7767", "http://127.0.0.1:7768"})) + g.Expect(err).To(gomega.Not(gomega.HaveOccurred())) + g.Expect(len(values)).To(gomega.Equal(2)) + g.Expect(values).To(gomega.Equal([]string{"http://127.0.0.1:7767", "http://127.0.0.1:7768"})) } func TestGetHealthEndpoint(t *testing.T) { - g := NewGomegaWithT(t) - g.Expect(getHealthEndpoint("http://127.0.0.1:7767", "live")).To(Equal("http://127.0.0.1:7767/live")) - g.Expect(getHealthEndpoint("http://127.0.0.1:7767/", "live")).To(Equal("http://127.0.0.1:7767/live")) + g := gomega.NewGomegaWithT(t) + g.Expect(getHealthEndpoint("http://127.0.0.1:7767", "live")).To(gomega.Equal("http://127.0.0.1:7767/live")) + g.Expect(getHealthEndpoint("http://127.0.0.1:7767/", "live")).To(gomega.Equal("http://127.0.0.1:7767/live")) } diff --git a/pkg/cmd/version.go b/pkg/cmd/version.go index 95e7c037..dee0239d 100644 --- a/pkg/cmd/version.go +++ b/pkg/cmd/version.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -26,7 +26,7 @@ var versionCmd = &cobra.Command{ Long: `The 'get version' command displays version and build details for the Coherence-CLI. Use the '-u' option to check for updates.`, Args: cobra.ExactArgs(0), - Run: func(cmd *cobra.Command, args []string) { + Run: func(cmd *cobra.Command, _ []string) { var ( err error latestVersion string diff --git a/pkg/cmd/version_test.go b/pkg/cmd/version_test.go index 2925b51a..a5109855 100644 --- a/pkg/cmd/version_test.go +++ b/pkg/cmd/version_test.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -7,13 +7,13 @@ package cmd import ( - . "github.com/onsi/gomega" + "github.com/onsi/gomega" "testing" ) func TestVersionUpdate(t *testing.T) { - g := NewGomegaWithT(t) - g.Expect(isVersionUpdateAvailable("1.0.0", "1.0.1")).To(Equal(true)) - g.Expect(isVersionUpdateAvailable("1.0.0-RC1", "1.0.0")).To(Equal(true)) - g.Expect(isVersionUpdateAvailable("1.0.1-RC1", "1.0.0")).To(Equal(true)) + g := gomega.NewGomegaWithT(t) + g.Expect(isVersionUpdateAvailable("1.0.0", "1.0.1")).To(gomega.Equal(true)) + g.Expect(isVersionUpdateAvailable("1.0.0-RC1", "1.0.0")).To(gomega.Equal(true)) + g.Expect(isVersionUpdateAvailable("1.0.1-RC1", "1.0.0")).To(gomega.Equal(true)) } diff --git a/pkg/fetcher/http_fetcher.go b/pkg/fetcher/http_fetcher.go index ba0f8ed0..9f86518f 100644 --- a/pkg/fetcher/http_fetcher.go +++ b/pkg/fetcher/http_fetcher.go @@ -964,9 +964,8 @@ func (h HTTPFetcher) InvokeSnapshotOperation(serviceName, snapshotName, operatio return constants.EmptyByte, fmt.Errorf("unable to archive snapshot. Please ensure you have an archiver setup for your service. %v", err) } return constants.EmptyByte, err - } else { - return constants.EmptyByte, fmt.Errorf("invalid snapshot operation %s", operation) } + return constants.EmptyByte, fmt.Errorf("invalid snapshot operation %s", operation) } // InvokeStorageOperation invokes a storage manager operation against a service and cache @@ -1247,9 +1246,6 @@ func httpRequest(h HTTPFetcher, requestType, urlAppend string, absolute bool, co body []byte unsanitizedBody []byte buffer bytes.Buffer - URL = url.URL{} - httpProxy = os.Getenv("HTTP_PROXY") - proxy *url.URL isJSON = true ) @@ -1300,25 +1296,17 @@ func httpRequest(h HTTPFetcher, requestType, urlAppend string, absolute bool, co cookies, _ := cookiejar.New(nil) tr := &http.Transport{ + Proxy: http.ProxyFromEnvironment, TLSClientConfig: &tls.Config{ InsecureSkipVerify: IgnoreInvalidCerts, //nolint Certificates: certificates, RootCAs: certPool}, } - if httpProxy != "" { - proxy, err = URL.Parse(httpProxy) - if err != nil { - return constants.EmptyByte, fmt.Errorf("unable to parse HTTP_PROXY environment variable: %s, %v", httpProxy, err) - } - tr.Proxy = http.ProxyURL(proxy) - Logger.Info("Using HTTP Proxy", []zapcore.Field{zap.String("URL", httpProxy)}...) - } - client := &http.Client{Transport: tr, Timeout: time.Duration(RequestTimeout) * time.Second, Jar: cookies, - CheckRedirect: func(req *http.Request, via []*http.Request) error { + CheckRedirect: func(_ *http.Request, _ []*http.Request) error { return http.ErrUseLastResponse }} diff --git a/pkg/utils/utils_test.go b/pkg/utils/utils_test.go index 21c43724..ef944b04 100644 --- a/pkg/utils/utils_test.go +++ b/pkg/utils/utils_test.go @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2022 Oracle and/or its affiliates. + * Copyright (c) 2021, 2024 Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at * https://oss.oracle.com/licenses/upl. */ @@ -9,7 +9,7 @@ package utils import ( "encoding/json" "fmt" - . "github.com/onsi/gomega" + "github.com/onsi/gomega" "github.com/oracle/coherence-cli/pkg/config" "os" "path/filepath" @@ -17,28 +17,28 @@ import ( ) func TestGetUniqueValues(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) - g.Expect(len(GetUniqueValues([]string{"A", "A", "B", "C"}))).To(Equal(3)) + g.Expect(len(GetUniqueValues([]string{"A", "A", "B", "C"}))).To(gomega.Equal(3)) } func TestSliceContains(t *testing.T) { - g := NewGomegaWithT(t) - g.Expect(SliceContains([]string{"A", "B", "C"}, "A")).To(Equal(true)) - g.Expect(SliceContains([]string{"A", "B", "C"}, "D")).To(Equal(false)) + g := gomega.NewGomegaWithT(t) + g.Expect(SliceContains([]string{"A", "B", "C"}, "A")).To(gomega.Equal(true)) + g.Expect(SliceContains([]string{"A", "B", "C"}, "D")).To(gomega.Equal(false)) } func TestGetSliceIndex(t *testing.T) { - g := NewGomegaWithT(t) - g.Expect(GetSliceIndex([]string{"A", "B", "C"}, "A")).To(Equal(0)) - g.Expect(GetSliceIndex([]string{"A", "B", "C"}, "D")).To(Equal(-1)) - g.Expect(GetSliceIndex([]string{"A", "B", "C"}, "B")).To(Equal(1)) - g.Expect(GetSliceIndex([]string{"A", "B", "C"}, "C")).To(Equal(2)) + g := gomega.NewGomegaWithT(t) + g.Expect(GetSliceIndex([]string{"A", "B", "C"}, "A")).To(gomega.Equal(0)) + g.Expect(GetSliceIndex([]string{"A", "B", "C"}, "D")).To(gomega.Equal(-1)) + g.Expect(GetSliceIndex([]string{"A", "B", "C"}, "B")).To(gomega.Equal(1)) + g.Expect(GetSliceIndex([]string{"A", "B", "C"}, "C")).To(gomega.Equal(2)) } func TestCombineByteArraysForJSON(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) b1 = []byte("abc") b2 = []byte("123") b3 = []byte("456") @@ -48,24 +48,24 @@ func TestCombineByteArraysForJSON(t *testing.T) { ) result, err = CombineByteArraysForJSON([][]byte{b1, b2}, []string{"a", "b"}) - g.Expect(err).To(BeNil()) - g.Expect(string(result)).To(Equal("{\"a\":abc,\"b\":123}")) + g.Expect(err).To(gomega.BeNil()) + g.Expect(string(result)).To(gomega.Equal("{\"a\":abc,\"b\":123}")) result, err = CombineByteArraysForJSON([][]byte{b1, b2, b3}, []string{"a", "b", "c"}) - g.Expect(err).To(BeNil()) - g.Expect(string(result)).To(Equal("{\"a\":abc,\"b\":123,\"c\":456}")) + g.Expect(err).To(gomega.BeNil()) + g.Expect(string(result)).To(gomega.Equal("{\"a\":abc,\"b\":123,\"c\":456}")) result, err = CombineByteArraysForJSON([][]byte{b2, b3, b4}, []string{"a", "b", "c"}) - g.Expect(err).To(BeNil()) - g.Expect(string(result)).To(Equal("{\"a\":123,\"b\":456,\"c\":{}}")) + g.Expect(err).To(gomega.BeNil()) + g.Expect(string(result)).To(gomega.Equal("{\"a\":123,\"b\":456,\"c\":{}}")) result, err = CombineByteArraysForJSON([][]byte{b4, b1}, []string{"a", "b"}) - g.Expect(err).To(BeNil()) - g.Expect(string(result)).To(Equal("{\"a\":{},\"b\":abc}")) + g.Expect(err).To(gomega.BeNil()) + g.Expect(string(result)).To(gomega.Equal("{\"a\":{},\"b\":abc}")) } func TestJsonPath(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) jsonString1 := `{ "event": { @@ -101,41 +101,41 @@ func TestJsonPath(t *testing.T) { } // assertJSONParse asserts that the jsonpath expression works -func assertJSONParse(g *WithT, jsonString, jsonPath, expected string) { +func assertJSONParse(g *gomega.WithT, jsonString, jsonPath, expected string) { jsonData := []byte(jsonString) data := getJSON(g, jsonData) result, err := ProcessJSONPath(data, jsonPath) - g.Expect(err).To(BeNil()) - g.Expect(string(result)).To(Equal(expected)) + g.Expect(err).To(gomega.BeNil()) + g.Expect(string(result)).To(gomega.Equal(expected)) } // getJSON returns a representation of the Json data as an interface{} -func getJSON(g *WithT, data []byte) interface{} { +func getJSON(g *gomega.WithT, data []byte) interface{} { var result interface{} err := json.Unmarshal(data, &result) - g.Expect(err).To(BeNil()) + g.Expect(err).To(gomega.BeNil()) return result } func TestSanitizeSnapshotName(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) expected = "test-tim" ) - g.Expect(SanitizeSnapshotName("abc123")).To(Equal("abc123")) - g.Expect(SanitizeSnapshotName("abc_123")).To(Equal("abc_123")) - g.Expect(SanitizeSnapshotName("abc-123")).To(Equal("abc-123")) - g.Expect(SanitizeSnapshotName("abc123~")).To(Equal("abc123-")) - g.Expect(SanitizeSnapshotName("abc123 ")).To(Equal("abc123-")) - g.Expect(SanitizeSnapshotName("!@#$%^")).To(Equal("------")) - g.Expect(SanitizeSnapshotName("test/tim")).To(Equal(expected)) - g.Expect(SanitizeSnapshotName("test\\tim")).To(Equal(expected)) - g.Expect(SanitizeSnapshotName("test.tim")).To(Equal(expected)) - g.Expect(SanitizeSnapshotName("c:test.tim")).To(Equal("c-test-tim")) + g.Expect(SanitizeSnapshotName("abc123")).To(gomega.Equal("abc123")) + g.Expect(SanitizeSnapshotName("abc_123")).To(gomega.Equal("abc_123")) + g.Expect(SanitizeSnapshotName("abc-123")).To(gomega.Equal("abc-123")) + g.Expect(SanitizeSnapshotName("abc123~")).To(gomega.Equal("abc123-")) + g.Expect(SanitizeSnapshotName("abc123 ")).To(gomega.Equal("abc123-")) + g.Expect(SanitizeSnapshotName("!@#$%^")).To(gomega.Equal("------")) + g.Expect(SanitizeSnapshotName("test/tim")).To(gomega.Equal(expected)) + g.Expect(SanitizeSnapshotName("test\\tim")).To(gomega.Equal(expected)) + g.Expect(SanitizeSnapshotName("test.tim")).To(gomega.Equal(expected)) + g.Expect(SanitizeSnapshotName("c:test.tim")).To(gomega.Equal("c-test-tim")) } func TestGetStorageMap(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) testCase1 := config.StorageDetails{Details: []config.StorageDetail{ {NodeID: "1", OwnedPartitionsPrimary: 1}, @@ -144,14 +144,14 @@ func TestGetStorageMap(t *testing.T) { }} result := GetStorageMap(testCase1) - g.Expect(len(result)).To(Equal(3)) - g.Expect(result[1]).To(Equal(true)) - g.Expect(result[2]).To(Equal(true)) - g.Expect(result[3]).To(Equal(false)) + g.Expect(len(result)).To(gomega.Equal(3)) + g.Expect(result[1]).To(gomega.Equal(true)) + g.Expect(result[2]).To(gomega.Equal(true)) + g.Expect(result[3]).To(gomega.Equal(false)) - g.Expect(IsStorageEnabled(1, result)).To(Equal(true)) - g.Expect(IsStorageEnabled(2, result)).To(Equal(true)) - g.Expect(IsStorageEnabled(3, result)).To(Equal(false)) + g.Expect(IsStorageEnabled(1, result)).To(gomega.Equal(true)) + g.Expect(IsStorageEnabled(2, result)).To(gomega.Equal(true)) + g.Expect(IsStorageEnabled(3, result)).To(gomega.Equal(false)) // test that a single storage count > 0 should make the node storage enabled testCase2 := config.StorageDetails{Details: []config.StorageDetail{ @@ -161,9 +161,9 @@ func TestGetStorageMap(t *testing.T) { }} result = GetStorageMap(testCase2) - g.Expect(len(result)).To(Equal(2)) - g.Expect(result[1]).To(Equal(true)) - g.Expect(result[2]).To(Equal(false)) + g.Expect(len(result)).To(gomega.Equal(2)) + g.Expect(result[1]).To(gomega.Equal(true)) + g.Expect(result[2]).To(gomega.Equal(false)) // test that a single storage count > 0 should make the node storage enabled when it is second testCase3 := config.StorageDetails{Details: []config.StorageDetail{ @@ -173,9 +173,9 @@ func TestGetStorageMap(t *testing.T) { }} result = GetStorageMap(testCase3) - g.Expect(len(result)).To(Equal(2)) - g.Expect(result[1]).To(Equal(true)) - g.Expect(result[2]).To(Equal(false)) + g.Expect(len(result)).To(gomega.Equal(2)) + g.Expect(result[1]).To(gomega.Equal(true)) + g.Expect(result[2]).To(gomega.Equal(false)) // test that a single storage count > 0 should make the node storage enabled when it is second testCase4 := config.StorageDetails{Details: []config.StorageDetail{ @@ -187,80 +187,80 @@ func TestGetStorageMap(t *testing.T) { }} result = GetStorageMap(testCase4) - g.Expect(len(result)).To(Equal(3)) - g.Expect(result[1]).To(Equal(true)) - g.Expect(result[2]).To(Equal(true)) - g.Expect(result[3]).To(Equal(false)) + g.Expect(len(result)).To(gomega.Equal(3)) + g.Expect(result[1]).To(gomega.Equal(true)) + g.Expect(result[2]).To(gomega.Equal(true)) + g.Expect(result[3]).To(gomega.Equal(false)) } func TestPortValidation(t *testing.T) { - g := NewGomegaWithT(t) - - g.Expect(ValidatePort(100)).Should(Equal(ErrPort)) - g.Expect(ValidatePort(1023)).Should(Equal(ErrPort)) - g.Expect(ValidatePort(65536)).Should(Equal(ErrPort)) - g.Expect(ValidatePort(-1)).Should(Equal(ErrPort)) - g.Expect(ValidatePort(1024)).ShouldNot(HaveOccurred()) - g.Expect(ValidatePort(65535)).ShouldNot(HaveOccurred()) - g.Expect(ValidatePort(12345)).ShouldNot(HaveOccurred()) + g := gomega.NewGomegaWithT(t) + + g.Expect(ValidatePort(100)).Should(gomega.Equal(ErrPort)) + g.Expect(ValidatePort(1023)).Should(gomega.Equal(ErrPort)) + g.Expect(ValidatePort(65536)).Should(gomega.Equal(ErrPort)) + g.Expect(ValidatePort(-1)).Should(gomega.Equal(ErrPort)) + g.Expect(ValidatePort(1024)).ShouldNot(gomega.HaveOccurred()) + g.Expect(ValidatePort(65535)).ShouldNot(gomega.HaveOccurred()) + g.Expect(ValidatePort(12345)).ShouldNot(gomega.HaveOccurred()) } func TestGetStartupDelayInMillis(t *testing.T) { var ( - g = NewGomegaWithT(t) + g = gomega.NewGomegaWithT(t) result int64 err error ) result, err = GetStartupDelayInMillis("0ms") - g.Expect(err).To(Not(HaveOccurred())) - g.Expect(result).Should(Equal(int64(0))) + g.Expect(err).To(gomega.Not(gomega.HaveOccurred())) + g.Expect(result).Should(gomega.Equal(int64(0))) result, err = GetStartupDelayInMillis("123") - g.Expect(err).To(Not(HaveOccurred())) - g.Expect(result).Should(Equal(int64(123))) + g.Expect(err).To(gomega.Not(gomega.HaveOccurred())) + g.Expect(result).Should(gomega.Equal(int64(123))) result, err = GetStartupDelayInMillis("10ms") - g.Expect(err).To(Not(HaveOccurred())) - g.Expect(result).Should(Equal(int64(10))) + g.Expect(err).To(gomega.Not(gomega.HaveOccurred())) + g.Expect(result).Should(gomega.Equal(int64(10))) result, err = GetStartupDelayInMillis("1s") - g.Expect(err).To(Not(HaveOccurred())) - g.Expect(result).Should(Equal(int64(1000))) + g.Expect(err).To(gomega.Not(gomega.HaveOccurred())) + g.Expect(result).Should(gomega.Equal(int64(1000))) result, err = GetStartupDelayInMillis("23s") - g.Expect(err).To(Not(HaveOccurred())) - g.Expect(result).Should(Equal(int64(23000))) + g.Expect(err).To(gomega.Not(gomega.HaveOccurred())) + g.Expect(result).Should(gomega.Equal(int64(23000))) _, err = GetStartupDelayInMillis("233123123123123123s") - g.Expect(err).To(HaveOccurred()) + g.Expect(err).To(gomega.HaveOccurred()) _, err = GetStartupDelayInMillis("23xs") - g.Expect(err).To(HaveOccurred()) + g.Expect(err).To(gomega.HaveOccurred()) _, err = GetStartupDelayInMillis("s") - g.Expect(err).To(HaveOccurred()) + g.Expect(err).To(gomega.HaveOccurred()) _, err = GetStartupDelayInMillis("ms") - g.Expect(err).To(HaveOccurred()) + g.Expect(err).To(gomega.HaveOccurred()) } func TestNoWritableHomeDir(t *testing.T) { - g := NewGomegaWithT(t) + g := gomega.NewGomegaWithT(t) dir, err := os.MkdirTemp("", "") - g.Expect(err).To(Not(HaveOccurred())) + g.Expect(err).To(gomega.Not(gomega.HaveOccurred())) defer os.RemoveAll(dir) // change the directory to be not readable err = os.Chmod(dir, 0555) - g.Expect(err).To(Not(HaveOccurred())) + g.Expect(err).To(gomega.Not(gomega.HaveOccurred())) // try and ensure a file err = EnsureDirectory(filepath.Join(dir, "my-file")) - g.Expect(err).Should(HaveOccurred()) + g.Expect(err).Should(gomega.HaveOccurred()) // required fmt.Println("") diff --git a/scripts/run-compat-ce.sh b/scripts/run-compat-ce.sh index 5d7945a2..bc6a278a 100755 --- a/scripts/run-compat-ce.sh +++ b/scripts/run-compat-ce.sh @@ -9,23 +9,23 @@ # Run compatability tests set -e -echo "Coherence CE 22.06.8" -COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 COHERENCE_VERSION=22.06.8 make clean build-test-images test-e2e-standalone +echo "Coherence CE 22.06.9" +COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 COHERENCE_VERSION=22.06.9 make clean build-test-images test-e2e-standalone -echo "Coherence CE 24.03" -COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 COHERENCE_VERSION=24.03 make clean build-test-images test-e2e-standalone +echo "Coherence CE 24.03.1" +COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 COHERENCE_VERSION=24.03.1 make clean build-test-images test-e2e-standalone -echo "Coherence CE 24.03 with Executor" -COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 PROFILES=,executor COHERENCE_VERSION=24.03 make clean build-test-images test-e2e-standalone +echo "Coherence CE 24.03.1 with Executor" +COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 PROFILES=,executor COHERENCE_VERSION=24.03.1 make clean build-test-images test-e2e-standalone -echo "Coherence CE 14.1.1-0-16" -COHERENCE_VERSION=14.1.1-0-16 make clean build-test-images test-e2e-standalone +echo "Coherence CE 14.1.1-0-18" +COHERENCE_VERSION=14.1.1-0-18 make clean build-test-images test-e2e-standalone -echo "Coherence CE 24.03 with Topics" -COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 PROFILES=,topics COHERENCE_VERSION=24.03 make clean build-test-images test-e2e-topics +echo "Coherence CE 24.03.1 with Topics" +COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 PROFILES=,topics COHERENCE_VERSION=24.03.1 make clean build-test-images test-e2e-topics -echo "Coherence CE 24.03 with View Caches" -COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 PROFILES=,views COHERENCE_VERSION=24.03 make clean build-view-images test-e2e-views +echo "Coherence CE 24.03.1 with View Caches" +COHERENCE_BASE_IMAGE=gcr.io/distroless/java17 PROFILES=,views COHERENCE_VERSION=24.03.1 make clean build-view-images test-e2e-views # Security Enabled export COMPUTERNAME=server1