mirror of
https://gitee.com/milvus-io/milvus.git
synced 2026-01-07 19:31:51 +08:00
issue: #46500 - simplify the run_go_codecov.sh to make sure the set -e to protect any sub command failure. - remove all embed etcd in test to make full test can be run at local. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## PR Summary: Simplify Go Unit Tests by Removing Embedded etcd and Async Startup Scaffolding **Core Invariant:** This PR assumes that unit tests can be simplified by running without embedded etcd servers (delegating to environment-based or external etcd instances via `kvfactory.GetEtcdAndPath()` or `ETCD_ENDPOINTS`) and by removing goroutine-based async startup scaffolding in favor of synchronous component initialization. Tests remain functionally equivalent while becoming simpler to run and debug locally. **What is Removed or Simplified:** 1. **Embedded etcd test infrastructure deleted**: Removes `EmbedEtcdUtil` type and its public methods (SetupEtcd, TearDownEmbedEtcd) from `pkg/util/testutils/embed_etcd.go`, removes the `StartTestEmbedEtcdServer()` helper from `pkg/util/etcd/etcd_util.go`, and removes etcd embedding from test suites (e.g., `TaskSuite`, `EtcdSourceSuite`, `mixcoord/client_test.go`). Tests now either skip etcd-dependent tests (via `MILVUS_UT_WITHOUT_KAFKA=1` environment flag in `kafka_test.go`) or source etcd from external configuration (via `kvfactory.GetEtcdAndPath()` in `task_test.go`, or `ETCD_ENDPOINTS` environment variable in `etcd_source_test.go`). This eliminates the overhead of spinning up temporary etcd servers for unit tests. 2. **Async startup scaffolding replaced with synchronous initialization**: In `internal/proxy/proxy_test.go` and `proxy_rpc_test.go`, the `startGrpc()` method signature removes the `sync.WaitGroup` parameter; components are now created, prepared, and run synchronously in-place rather than in goroutines (e.g., `go testServer.startGrpc(ctx, &p)` becomes `testServer.startGrpc(ctx, &p)` running synchronously). Readiness checks (e.g., `waitForGrpcReady()`) remain in place to ensure startup safety without concurrency constructs. This simplifies control flow and reduces debugging complexity. 3. **Shell script orchestration unified with proper error handling**: In `scripts/run_go_codecov.sh` and `scripts/run_intergration_test.sh`, per-package inline test invocations are consolidated into a single `test_cmd()` function with unified `TEST_CMD_WITH_ARGS` array containing race, coverage, verbose, and other flags. The problematic `set -ex` is replaced with `set -e` alone (removing debug output noise while preserving strict error semantics), ensuring the scripts fail fast on any command failure. **Why No Regression:** - Test assertions and code paths remain unchanged; only deployment source of etcd (embedded → external) and startup orchestration (async → sync) change. - Readiness verification (e.g., `waitForGrpcReady()`) is retained, ensuring components are initialized before test execution. - Test flags (race detection, coverage, verbosity) are uniformly applied across all packages via unified `TEST_CMD_WITH_ARGS`, preserving test coverage and quality. - `set -e` alone is sufficient for strict failure detection without the `-x` flag's verbose output. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: chyezh <chyezh@outlook.com>
98 lines
2.4 KiB
Go
98 lines
2.4 KiB
Go
// Licensed to the LF AI & Data foundation under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The ASF licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package config
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/suite"
|
|
"go.uber.org/atomic"
|
|
|
|
"github.com/milvus-io/milvus/pkg/v2/util/etcd"
|
|
)
|
|
|
|
type EtcdSourceSuite struct {
|
|
suite.Suite
|
|
|
|
endpoints []string
|
|
}
|
|
|
|
func (s *EtcdSourceSuite) SetupSuite() {
|
|
endpoints := os.Getenv("ETCD_ENDPOINTS")
|
|
if endpoints == "" {
|
|
endpoints = "localhost:2379"
|
|
}
|
|
s.endpoints = strings.Split(endpoints, ",")
|
|
}
|
|
|
|
func (s *EtcdSourceSuite) TearDownSuite() {
|
|
}
|
|
|
|
func (s *EtcdSourceSuite) TestNewSource() {
|
|
source, err := NewEtcdSource(&EtcdInfo{
|
|
Endpoints: s.endpoints,
|
|
KeyPrefix: "by-dev",
|
|
RefreshInterval: time.Second,
|
|
})
|
|
s.NoError(err)
|
|
s.NotNil(source)
|
|
source.Close()
|
|
}
|
|
|
|
func (s *EtcdSourceSuite) TestUpdateOptions() {
|
|
source, err := NewEtcdSource(&EtcdInfo{
|
|
Endpoints: s.endpoints,
|
|
KeyPrefix: "test_update_options_1",
|
|
RefreshInterval: time.Second,
|
|
})
|
|
s.Require().NoError(err)
|
|
s.Require().NotNil(source)
|
|
defer source.Close()
|
|
|
|
called := atomic.NewBool(false)
|
|
|
|
handler := NewHandler("test_update_options", func(evt *Event) {
|
|
called.Store(true)
|
|
})
|
|
|
|
source.SetEventHandler(handler)
|
|
|
|
source.UpdateOptions(Options{
|
|
EtcdInfo: &EtcdInfo{
|
|
Endpoints: s.endpoints,
|
|
KeyPrefix: "test_update_options_2",
|
|
RefreshInterval: time.Millisecond * 100,
|
|
},
|
|
})
|
|
|
|
client, err := etcd.GetRemoteEtcdClient(s.endpoints)
|
|
s.Require().NoError(err)
|
|
client.Put(context.Background(), "test_update_options_2/config/abc", "def")
|
|
|
|
s.Eventually(func() bool {
|
|
return called.Load()
|
|
}, time.Second*2, time.Millisecond*100)
|
|
}
|
|
|
|
func TestEtcdSource(t *testing.T) {
|
|
suite.Run(t, new(EtcdSourceSuite))
|
|
}
|