polardbxoperator/test/e2e/polardbxparameter/modify.go

266 lines
8.7 KiB
Go

/*
Copyright 2021 Alibaba Group Holding Limited.
Licensed 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 polardbxparameter
import (
"time"
polardbxv1 "github.com/alibaba/polardbx-operator/api/v1"
pxcmanager "github.com/alibaba/polardbx-operator/test/e2e/polardbxcluster/lifecycle"
"github.com/alibaba/polardbx-operator/test/framework"
pxcframework "github.com/alibaba/polardbx-operator/test/framework/polardbxcluster"
pxpframework "github.com/alibaba/polardbx-operator/test/framework/polardbxparameter"
"github.com/onsi/ginkgo"
"k8s.io/apimachinery/pkg/types"
)
var _ = ginkgo.Describe("[PolarDBXParameter]", func() {
f := framework.NewDefaultFramework(framework.TestContext)
var cnParamTemplateList, dnParamTemplateList []polardbxv1.TemplateParams
var cnParamList, dnParamList []polardbxv1.Params
var cnRestartParamList, dnRestartParamList []polardbxv1.Params
ginkgo.BeforeEach(func() {
cnParamTemplateList = []polardbxv1.TemplateParams{
{
Name: "CONN_POOL_BLOCK_TIMEOUT",
DefaultValue: "5000",
Mode: "readwrite",
Restart: false,
Unit: "INT",
DivisibilityFactor: 1,
Optional: "[1000-60000]",
},
{
Name: "ENABLE_COROUTINE",
DefaultValue: "false",
Mode: "readwrite",
Restart: true,
Unit: "STRING",
DivisibilityFactor: 1,
Optional: "[true|false]",
},
}
dnParamTemplateList = []polardbxv1.TemplateParams{
{
Name: "auto_increment_increment",
DefaultValue: "1",
Mode: "readwrite",
Restart: false,
Unit: "INT",
DivisibilityFactor: 1,
Optional: "[1-65535]",
},
{
Name: "back_log",
DefaultValue: "3000",
Mode: "readwrite",
Restart: true,
Unit: "INT",
DivisibilityFactor: 1,
Optional: "[0-65535]",
},
}
cnParamList = []polardbxv1.Params{
{
Name: "CONN_POOL_BLOCK_TIMEOUT",
Value: "10000",
},
}
dnParamList = []polardbxv1.Params{
{
Name: "auto_increment_increment",
Value: "10",
},
}
cnRestartParamList = []polardbxv1.Params{
//{
// Name: "ENABLE_COROUTINE",
// Value: intstr.IntOrString{Type: intstr.String, StrVal: "true"},
//},
{
Name: "CONN_POOL_BLOCK_TIMEOUT",
Value: "10000",
},
}
dnRestartParamList = []polardbxv1.Params{
{
Name: "back_log",
Value: "300",
},
}
})
ginkgo.It("parameter template", func() {
pxc := pxcframework.NewPolarDBXCluster(
"e2e-test-parameter-template",
f.Namespace,
pxcframework.ProtocolVersion(5),
pxcframework.ParameterTemplate("e2e-test-param-template"),
pxcframework.TopologyModeGuide("quick-start-paxos"),
)
pxpt := pxpframework.NewPolarDBXParameterTemplate(
"e2e-test-param-template",
pxc.Namespace,
pxpframework.SetTemplateNodeType("cn", cnParamTemplateList),
pxpframework.SetTemplateNodeType("dn", dnParamTemplateList),
)
// Always run clean up to make sure objects are cleaned.
defer pxcmanager.DeletePolarDBXClusterAndWaitUntilItDisappear(f, pxc, 1*time.Minute)
defer DeletePolarDBXParameterTemplateAndWaitUntilItDisappear(f, pxpt, 1*time.Minute)
// create parameter template
CreatePolarDBXParameterTemplate(f, pxpt, 1*time.Minute)
// Do create and verify.
pxcmanager.CreatePolarDBXClusterAndWaitUntilRunningOrFail(f, pxc, 10*time.Minute)
// Update object.
framework.ExpectNoError(f.Client.Get(f.Ctx, types.NamespacedName{
Name: pxc.Name, Namespace: f.Namespace,
}, pxc))
cnExpectedParams := make(map[string]string)
for _, p := range cnParamTemplateList {
cnExpectedParams[p.Name] = p.DefaultValue
}
dnExpectedParams := make(map[string]string)
for _, p := range dnParamTemplateList {
dnExpectedParams[p.Name] = p.DefaultValue
}
exp := pxcframework.NewExpectation(f, pxc)
exp.ExpectCNParameterPersistenceOk(cnExpectedParams)
exp.ExpectDNParameterPersistenceOk(dnExpectedParams, false)
})
ginkgo.It("read-write parameters", func() {
pxc := pxcframework.NewPolarDBXCluster(
"e2e-test-parameter-rw",
f.Namespace,
pxcframework.ProtocolVersion(5),
pxcframework.TopologyModeGuide("quick-start"),
pxcframework.ParameterTemplate("e2e-test-param-template-rw"),
)
pxp := pxpframework.NewPolarDBXParameter(
"e2e-test-param-rw",
pxc.Namespace,
pxpframework.SetLabel("parameter", "dynamic"),
pxpframework.SetTemplateNameAndClusterName("e2e-test-param-template-rw", pxc.Name),
pxpframework.SetNodeType("cn", "e2e-test-cn", pxpframework.RollingRestart, cnParamList),
pxpframework.SetNodeType("dn", "e2e-test-dn", pxpframework.RollingRestart, dnParamList),
)
pxpt := pxpframework.NewPolarDBXParameterTemplate(
"e2e-test-param-template-rw",
pxc.Namespace,
pxpframework.SetTemplateNodeType("cn", cnParamTemplateList),
pxpframework.SetTemplateNodeType("dn", dnParamTemplateList),
)
// Always run clean up to make sure objects are cleaned.
defer pxcmanager.DeletePolarDBXClusterAndWaitUntilItDisappear(f, pxc, 1*time.Minute)
defer DeletePolarDBXParameterAndWaitUntilItDisappear(f, pxp, 1*time.Minute)
defer DeletePolarDBXParameterTemplateAndWaitUntilItDisappear(f, pxpt, 1*time.Minute)
// create parameter template
CreatePolarDBXParameterTemplate(f, pxpt, 1*time.Minute)
// Do create and verify.
pxcmanager.CreatePolarDBXClusterAndWaitUntilRunningOrFail(f, pxc, 10*time.Minute)
// Update object.
framework.ExpectNoError(f.Client.Get(f.Ctx, types.NamespacedName{
Name: pxc.Name, Namespace: f.Namespace,
}, pxc))
// create dynamic parameter parameter
CreatePolarDBXParameterAndWaitUntilRunningOrFail(f, pxp, 5*time.Minute)
cnExpectedParams := make(map[string]string)
for _, p := range cnParamList {
cnExpectedParams[p.Name] = p.Value
}
dnExpectedParams := make(map[string]string)
for _, p := range dnParamList {
dnExpectedParams[p.Name] = p.Value
}
exp := pxcframework.NewExpectation(f, pxc)
exp.ExpectCNParameterPersistenceOk(cnExpectedParams)
exp.ExpectDNParameterPersistenceOk(dnExpectedParams, true)
})
ginkgo.It("restart parameters", func() {
pxc := pxcframework.NewPolarDBXCluster(
"e2e-test-parameter-restart",
f.Namespace,
pxcframework.ProtocolVersion(5),
pxcframework.TopologyModeGuide("quick-start-paxos"),
pxcframework.ParameterTemplate("e2e-test-param-template-restart"),
)
pxp := pxpframework.NewPolarDBXParameter(
"e2e-test-param-restart",
pxc.Namespace,
pxpframework.SetLabel("parameter", "dynamic"),
pxpframework.SetTemplateNameAndClusterName("e2e-test-param-template-restart", pxc.Name),
pxpframework.SetNodeType("cn", "e2e-test-cn", pxpframework.RollingRestart, cnRestartParamList),
pxpframework.SetNodeType("dn", "e2e-test-dn", pxpframework.RollingRestart, dnRestartParamList),
)
pxpt := pxpframework.NewPolarDBXParameterTemplate(
"e2e-test-param-template-restart",
pxc.Namespace,
pxpframework.SetTemplateNodeType("cn", cnParamTemplateList),
pxpframework.SetTemplateNodeType("dn", dnParamTemplateList),
)
// Always run clean up to make sure objects are cleaned.
defer pxcmanager.DeletePolarDBXClusterAndWaitUntilItDisappear(f, pxc, 1*time.Minute)
defer DeletePolarDBXParameterAndWaitUntilItDisappear(f, pxp, 1*time.Minute)
defer DeletePolarDBXParameterTemplateAndWaitUntilItDisappear(f, pxpt, 1*time.Minute)
// create parameter template
CreatePolarDBXParameterTemplate(f, pxpt, 1*time.Minute)
// Do create and verify.
pxcmanager.CreatePolarDBXClusterAndWaitUntilRunningOrFail(f, pxc, 10*time.Minute)
// Update object.
framework.ExpectNoError(f.Client.Get(f.Ctx, types.NamespacedName{
Name: pxc.Name, Namespace: f.Namespace,
}, pxc))
CreatePolarDBXParameterAndWaitUntilRunningOrFail(f, pxp, 5*time.Minute)
cnExpectedParams := make(map[string]string)
for _, p := range cnRestartParamList {
cnExpectedParams[p.Name] = p.Value
}
dnExpectedParams := make(map[string]string)
for _, p := range dnRestartParamList {
dnExpectedParams[p.Name] = p.Value
}
exp := pxcframework.NewExpectation(f, pxc)
exp.ExpectRestartOk(f.Client, pxc.Name, pxc.Namespace, 10*time.Minute)
exp.ExpectCNParameterPersistenceOk(cnExpectedParams)
exp.ExpectDNParameterPersistenceOk(dnExpectedParams, true)
})
})