package serverlessdb_operator
import (
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
. "gitcode.com/openFuyao/e2e-auto-test/e2e/serverlessdb-operator/utils"
)
var _ = Describe("ServerlessDB 连接地址保持",
Label("serverlessdb-operator", "with-workload-cluster", "26.01"), Label("P0"), func() {
It("serverlessdb-IT-011:释放后重新申请同一 app_ref,endpoint 保持不变", func() {
poolName := "pool-it011"
createPoolAndAwaitWarm(poolName, 2)
appRef := "app-it011"
By("首次申请")
resp1, status, err := apiClient.Allocate(ctx, testNs, &CreateInstanceRequest{
AppRef: appRef,
PgVersion: pgVersion,
Resources: InstanceResources{Cpu: allocateCpu, Memory: allocateMemory},
})
Expect(err).NotTo(HaveOccurred())
Expect(status).To(Equal(200))
Expect(resp1.Endpoint).NotTo(BeEmpty())
awaitInstancePhase(appRef, "Running")
DeferCleanup(func() { _, _ = apiClient.Release(ctx, testNs, appRef) })
By("释放实例(Headless Service 保留)")
_, err = apiClient.Release(ctx, testNs, appRef)
Expect(err).NotTo(HaveOccurred())
By("等待实例被删除,pool 补齐 warm 实例")
Eventually(func(g Gomega) int {
list, err := ListDBInstances(ctx, k8sClient, testNs, LabelEq(LabelAppRef, appRef))
g.Expect(err).NotTo(HaveOccurred())
return len(list.Items)
}, reconcileWait, reconcilePoll).Should(Equal(0))
By("重新申请同一 app_ref")
resp2, status2, err := apiClient.Allocate(ctx, testNs, &CreateInstanceRequest{
AppRef: appRef,
PgVersion: pgVersion,
Resources: InstanceResources{Cpu: allocateCpu, Memory: allocateMemory},
})
Expect(err).NotTo(HaveOccurred())
Expect(status2).To(Equal(200))
Expect(resp2.Endpoint).NotTo(BeEmpty())
awaitInstancePhase(appRef, "Running")
DeferCleanup(func() { _, _ = apiClient.Release(ctx, testNs, appRef) })
By("校验两次 endpoint 相同(Headless Service 复用)")
Expect(resp2.Endpoint).To(Equal(resp1.Endpoint), "释放后重新申请的 endpoint 应当保持不变")
})
})