blob: 62abee5c79dab271451fee1e2332b819cfd9958a [file]
// Licensed to the Apache Software Foundation (ASF) 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 resource
import (
dv1 "github.com/apache/doris-operator/api/disaggregated/v1"
v1 "github.com/apache/doris-operator/api/doris/v1"
"github.com/magiconair/properties/assert"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"testing"
)
func Test_BuildInternalService(t *testing.T) {
for _, ct := range []v1.ComponentType{v1.Component_FE, v1.Component_CN, v1.Component_Broker, v1.Component_BE} {
svc := BuildInternalService(dcr, ct, cm)
t.Log(svc)
}
}
func Test_BuildExternalService(t *testing.T) {
for _, ct := range []v1.ComponentType{v1.Component_FE, v1.Component_CN, v1.Component_Broker, v1.Component_BE} {
svc := BuildExternalService(dcr, ct, cm)
t.Log(svc)
}
}
func Test_GetDisaggregatedContainerPorts(t *testing.T) {
fcps := []corev1.ContainerPort{
{
Name: GetPortKey(HTTP_PORT),
ContainerPort: GetPort(cm, HTTP_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(RPC_PORT),
ContainerPort: GetPort(cm, RPC_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(QUERY_PORT),
ContainerPort: GetPort(cm, QUERY_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(EDIT_LOG_PORT),
ContainerPort: GetPort(cm, EDIT_LOG_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(ARROW_FLIGHT_SQL_PORT),
Protocol: corev1.ProtocolTCP,
ContainerPort: GetPort(cm, ARROW_FLIGHT_SQL_PORT),
},
}
bcps := []corev1.ContainerPort{
{
Name: GetPortKey(BE_PORT),
ContainerPort: GetPort(cm, BE_PORT),
}, {
Name: GetPortKey(WEBSERVER_PORT),
ContainerPort: GetPort(cm, WEBSERVER_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(HEARTBEAT_SERVICE_PORT),
ContainerPort: GetPort(cm, HEARTBEAT_SERVICE_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(BRPC_PORT),
ContainerPort: GetPort(cm, BRPC_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(ARROW_FLIGHT_SQL_PORT),
ContainerPort: GetPort(cm, ARROW_FLIGHT_SQL_PORT),
Protocol: corev1.ProtocolTCP,
},
}
fgfps := GetDisaggregatedContainerPorts(cm, dv1.DisaggregatedFE)
for i := 0; i < len(fcps); i++ {
assert.Equal(t, fcps[i], fgfps[i])
}
bgcps := GetDisaggregatedContainerPorts(cm, dv1.DisaggregatedBE)
for i := 0; i < len(bcps); i++ {
assert.Equal(t, bcps[i], bgcps[i])
}
}
func Test_ServiceDeepEqual(t *testing.T) {
src := []corev1.Service{
{
ObjectMeta: metav1.ObjectMeta{
Name: "test1-hash",
Namespace: "default",
Annotations: Annotations{
v1.ComponentResourceHash: "123456",
},
},
Spec: corev1.ServiceSpec{},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "test2-annotation",
Namespace: "default",
},
Spec: corev1.ServiceSpec{},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "test3-query-port",
Namespace: "default",
},
Spec: corev1.ServiceSpec{
Ports: []corev1.ServicePort{
{
Name: "query-port",
Port: 9030,
},
},
},
}, {
ObjectMeta: metav1.ObjectMeta{
Name: "test4-label",
Namespace: "default",
Labels: map[string]string{
"test": "test",
},
},
Spec: corev1.ServiceSpec{
Type: corev1.ServiceTypeClusterIP,
Ports: []corev1.ServicePort{
{
Name: "query-port",
Port: 9030,
},
},
},
}, {
ObjectMeta: metav1.ObjectMeta{
Name: "test5-selector",
Namespace: "default",
},
Spec: corev1.ServiceSpec{
Type: corev1.ServiceTypeClusterIP,
Ports: []corev1.ServicePort{
{
Name: "query-port",
Port: 9030,
},
},
Selector: map[string]string{
"test": "test",
},
},
},
}
dst := []corev1.Service{
{
ObjectMeta: metav1.ObjectMeta{
Name: "test1-hash",
Namespace: "default",
Annotations: Annotations{
v1.ComponentResourceHash: "1234",
},
},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "test2-annotation",
Namespace: "default",
Annotations: Annotations{
"test": "test",
},
},
Spec: corev1.ServiceSpec{},
}, {
ObjectMeta: metav1.ObjectMeta{
Name: "test3-query-port",
Namespace: "default",
},
Spec: corev1.ServiceSpec{
Ports: []corev1.ServicePort{
{
Name: "query-port",
Port: 9030,
},
},
},
}, {
ObjectMeta: metav1.ObjectMeta{
Name: "test4-label",
Namespace: "default",
Labels: map[string]string{
"test": "test",
},
},
Spec: corev1.ServiceSpec{
Type: corev1.ServiceTypeClusterIP,
Ports: []corev1.ServicePort{
{
Name: "query-port",
Port: 9030,
},
},
},
}, {
ObjectMeta: metav1.ObjectMeta{
Name: "test5-selector",
Namespace: "default",
},
Spec: corev1.ServiceSpec{
Type: corev1.ServiceTypeClusterIP,
Ports: []corev1.ServicePort{
{
Name: "query-port",
Port: 9030,
},
},
Selector: map[string]string{
"test": "test",
},
},
},
}
ress := []bool{false, false, true, true, true}
for i := 0; i < len(ress); i++ {
res := ServiceDeepEqual(&src[i], &dst[i])
if res != ress[i] {
t.Errorf("the index %d not right.", i)
}
}
}
func Test_GetContainerPorts(t *testing.T) {
fcps := []corev1.ContainerPort{
{
Name: GetPortKey(HTTP_PORT),
ContainerPort: GetPort(cm, HTTP_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(RPC_PORT),
ContainerPort: GetPort(cm, RPC_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(QUERY_PORT),
ContainerPort: GetPort(cm, QUERY_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(EDIT_LOG_PORT),
ContainerPort: GetPort(cm, EDIT_LOG_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(ARROW_FLIGHT_SQL_PORT),
Protocol: corev1.ProtocolTCP,
ContainerPort: GetPort(cm, ARROW_FLIGHT_SQL_PORT),
},
}
bcps := []corev1.ContainerPort{
{
Name: GetPortKey(BE_PORT),
ContainerPort: GetPort(cm, BE_PORT),
}, {
Name: GetPortKey(WEBSERVER_PORT),
ContainerPort: GetPort(cm, WEBSERVER_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(HEARTBEAT_SERVICE_PORT),
ContainerPort: GetPort(cm, HEARTBEAT_SERVICE_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(BRPC_PORT),
ContainerPort: GetPort(cm, BRPC_PORT),
Protocol: corev1.ProtocolTCP,
}, {
Name: GetPortKey(ARROW_FLIGHT_SQL_PORT),
ContainerPort: GetPort(cm, ARROW_FLIGHT_SQL_PORT),
Protocol: corev1.ProtocolTCP,
},
}
brokercps := []corev1.ContainerPort{
{
Name: GetPortKey(BROKER_IPC_PORT),
ContainerPort: GetPort(cm, BROKER_IPC_PORT),
},
}
fgcps := GetContainerPorts(cm, v1.Component_FE)
bgcps := GetContainerPorts(cm, v1.Component_BE)
brokergcps := GetContainerPorts(cm, v1.Component_Broker)
for i := 0; i < len(fcps); i++ {
assert.Equal(t, fcps[i], fgcps[i])
}
for i := 0; i < len(bcps); i++ {
assert.Equal(t, bcps[i], bgcps[i])
}
for i := 0; i < len(brokergcps); i++ {
assert.Equal(t, brokercps[i], brokergcps[i])
}
}