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>
59 lines
2.0 KiB
Go
59 lines
2.0 KiB
Go
package kafka
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/milvus-io/milvus-proto/go-api/v2/commonpb"
|
|
"github.com/milvus-io/milvus/pkg/v2/streaming/util/message"
|
|
"github.com/milvus-io/milvus/pkg/v2/streaming/walimpls"
|
|
"github.com/milvus-io/milvus/pkg/v2/streaming/walimpls/registry"
|
|
"github.com/milvus-io/milvus/pkg/v2/util/paramtable"
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
paramtable.Init()
|
|
m.Run()
|
|
}
|
|
|
|
func TestRegistry(t *testing.T) {
|
|
registeredB := registry.MustGetBuilder(message.WALNameKafka)
|
|
assert.NotNil(t, registeredB)
|
|
assert.Equal(t, message.WALNameKafka, registeredB.Name())
|
|
|
|
id, err := message.UnmarshalMessageID(&commonpb.MessageID{WALName: commonpb.WALName(message.WALNameKafka), Id: kafkaID(123).Marshal()})
|
|
assert.NoError(t, err)
|
|
assert.True(t, id.EQ(kafkaID(123)))
|
|
}
|
|
|
|
func TestKafka(t *testing.T) {
|
|
if os.Getenv("MILVUS_UT_WITHOUT_KAFKA") != "" {
|
|
t.Skip("there's no kafka broker available, skipping kafka test")
|
|
}
|
|
walimpls.NewWALImplsTestFramework(t, 100, &builderImpl{}).Run()
|
|
}
|
|
|
|
func TestGetBasicConfig(t *testing.T) {
|
|
config := ¶mtable.Get().KafkaCfg
|
|
oldSecurityProtocol := config.SecurityProtocol.SwapTempValue("test")
|
|
oldSaslUsername := config.SaslUsername.SwapTempValue("test")
|
|
oldSaslPassword := config.SaslPassword.SwapTempValue("test")
|
|
oldkafkaUseSSL := config.KafkaUseSSL.SwapTempValue("true")
|
|
oldKafkaTLSKeyPassword := config.KafkaTLSKeyPassword.SwapTempValue("test")
|
|
defer func() {
|
|
config.SecurityProtocol.SwapTempValue(oldSecurityProtocol)
|
|
config.SaslUsername.SwapTempValue(oldSaslUsername)
|
|
config.SaslPassword.SwapTempValue(oldSaslPassword)
|
|
config.KafkaUseSSL.SwapTempValue(oldkafkaUseSSL)
|
|
config.KafkaTLSKeyPassword.SwapTempValue(oldKafkaTLSKeyPassword)
|
|
}()
|
|
basicConfig := getBasicConfig(config)
|
|
|
|
assert.NotNil(t, basicConfig["ssl.key.password"])
|
|
assert.NotNil(t, basicConfig["ssl.certificate.location"])
|
|
assert.NotNil(t, basicConfig["sasl.username"])
|
|
assert.NotNil(t, basicConfig["security.protocol"])
|
|
}
|