| // 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 ( |
| "reflect" |
| "strconv" |
| "testing" |
| |
| dorisv1 "github.com/apache/doris-operator/api/doris/v1" |
| corev1 "k8s.io/api/core/v1" |
| ) |
| |
| func Test_GetStartMode(t *testing.T) { |
| tests := []map[string]interface{}{ |
| { |
| "enable_fqdn_mode": "true", |
| }, |
| {}, |
| { |
| "enable_fqdn_mode": "IP", |
| }} |
| ress := []string{"FQDN", "FQDN", "IP"} |
| |
| for i, test := range tests { |
| t.Run("test"+strconv.Itoa(i), func(t *testing.T) { |
| res := ress[i] |
| mode := GetStartMode(test) |
| if res != mode { |
| t.Errorf("mode %s not equal res %s", mode, res) |
| } |
| }) |
| } |
| } |
| |
| func Test_ResolveConfigMpas(t *testing.T) { |
| tests := []*corev1.ConfigMap{ |
| &corev1.ConfigMap{ |
| Data: map[string]string{ |
| "fe.conf": ` |
| # the output dir of stderr and stdout |
| LOG_DIR = ${DORIS_HOME}/log |
| |
| JAVA_OPTS="-Djavax.security.auth.useSubjectCredsOnly=false -Xss4m -Xmx8192m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$DORIS_HOME/log/fe.gc.log.$CUR_DATE" |
| |
| # For jdk 9+, this JAVA_OPTS will be used as default JVM options |
| JAVA_OPTS_FOR_JDK_9="-Djavax.security.auth.useSubjectCredsOnly=false -Xss4m -Xmx8192m -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:$DORIS_HOME/log/fe.gc.log.$CUR_DATE:time" |
| |
| # INFO, WARN, ERROR, FATAL |
| sys_log_level = INFO |
| |
| # NORMAL, BRIEF, ASYNC |
| sys_log_mode = NORMAL |
| |
| # Default dirs to put jdbc drivers,default value is ${DORIS_HOME}/jdbc_drivers |
| # jdbc_drivers_dir = ${DORIS_HOME}/jdbc_drivers |
| |
| http_port = 8030 |
| rpc_port = 9020 |
| query_port = 9030 |
| edit_log_port = 9010 |
| enable_fqdn_mode=true |
| `}}, |
| { |
| Data: map[string]string{ |
| "be.conf": ` |
| PPROF_TMPDIR="$DORIS_HOME/log/" |
| |
| JAVA_OPTS="-Xmx1024m -DlogPath=$DORIS_HOME/log/jni.log -Xloggc:$DORIS_HOME/log/be.gc.log.$CUR_DATE -Djavax.security.auth.useSubjectCredsOnly=false -Dsun.java.command=DorisBE -XX:-CriticalJNINatives -DJDBC_MIN_POOL=1 -DJDBC_MAX_POOL=100 -DJDBC_MAX_IDLE_TIME=300000 -DJDBC_MAX_WAIT_TIME=5000" |
| |
| # For jdk 9+, this JAVA_OPTS will be used as default JVM options |
| JAVA_OPTS_FOR_JDK_9="-Xmx1024m -DlogPath=$DORIS_HOME/log/jni.log -Xlog:gc:$DORIS_HOME/log/be.gc.log.$CUR_DATE -Djavax.security.auth.useSubjectCredsOnly=false -Dsun.java.command=DorisBE -XX:-CriticalJNINatives -DJDBC_MIN_POOL=1 -DJDBC_MAX_POOL=100 -DJDBC_MAX_IDLE_TIME=300000 -DJDBC_MAX_WAIT_TIME=5000" |
| |
| # since 1.2, the JAVA_HOME need to be set to run BE process. |
| # JAVA_HOME=/path/to/jdk/ |
| |
| # https://github.com/apache/doris/blob/master/docs/zh-CN/community/developer-guide/debug-tool.md#jemalloc-heap-profile |
| # https://jemalloc.net/jemalloc.3.html |
| JEMALLOC_CONF="percpu_arena:percpu,background_thread:true,metadata_thp:auto,muzzy_decay_ms:15000,dirty_decay_ms:15000,oversize_threshold:0,lg_tcache_max:20,prof:false,lg_prof_interval:32,lg_prof_sample:19,prof_gdump:false,prof_accum:false,prof_leak:false,prof_final:false" |
| JEMALLOC_PROF_PRFIX="" |
| |
| # INFO, WARNING, ERROR, FATAL |
| sys_log_level = INFO |
| |
| # ports for admin, web, heartbeat service |
| be_port = 9060 |
| webserver_port = 8040 |
| heartbeat_service_port = 9050 |
| brpc_port = 8060 |
| doris_cgroup_cpu_path=/sys/fs/cgroup/cpu/doris |
| enable_java_support=false`, |
| }, |
| }, |
| nil, |
| } |
| |
| m, err := ResolveConfigMaps(tests, dorisv1.Component_FE) |
| if err != nil { |
| t.Errorf("resolve configmaps faild, len=%d, err=%s", len(m), err.Error()) |
| } else if len(m) == 0 { |
| t.Errorf("resolve configmaps faild, len=%d", len(m)) |
| } |
| } |
| |
| func Test_GetMountConfigMapInfo(t *testing.T) { |
| c := dorisv1.ConfigMapInfo{ |
| ConfigMapName: "test", |
| ConfigMaps: []dorisv1.MountConfigMapInfo{}, |
| } |
| |
| fc := GetMountConfigMapInfo(c) |
| if len(fc) != 1 { |
| t.Errorf("get mountConfigMapInfo failed, len not equal 1") |
| } |
| } |
| |
| func Test_getCoreCmName(t *testing.T) { |
| type args struct { |
| dcr *dorisv1.DorisCluster |
| componentType dorisv1.ComponentType |
| } |
| |
| tests := []struct { |
| name string |
| args args |
| want string |
| }{ |
| { |
| name: "test1", |
| args: args{ |
| dcr: &dorisv1.DorisCluster{ |
| Spec: dorisv1.DorisClusterSpec{ |
| FeSpec: &dorisv1.FeSpec{ |
| BaseSpec: dorisv1.BaseSpec{ |
| ConfigMapInfo: dorisv1.ConfigMapInfo{ |
| ConfigMapName: "fe-config", |
| }, |
| }, |
| }, |
| }, |
| }, |
| componentType: dorisv1.Component_FE, |
| }, |
| want: "fe-config", |
| }, |
| { |
| name: "test2", |
| args: args{dcr: &dorisv1.DorisCluster{ |
| Spec: dorisv1.DorisClusterSpec{ |
| FeSpec: &dorisv1.FeSpec{ |
| BaseSpec: dorisv1.BaseSpec{ |
| ConfigMapInfo: dorisv1.ConfigMapInfo{ |
| ConfigMapName: "fe-config", |
| ConfigMaps: []dorisv1.MountConfigMapInfo{ |
| { |
| ConfigMapName: "fe-config-1", |
| MountPath: "config", |
| }, |
| }, |
| }, |
| }, |
| }, |
| }, |
| }, |
| componentType: dorisv1.Component_FE, |
| }, |
| want: "fe-config", |
| }, |
| } |
| for _, tt := range tests { |
| t.Run(tt.name, func(t *testing.T) { |
| if got := getDorisCoreConfigMapName(tt.args.dcr, tt.args.componentType); !reflect.DeepEqual(got, tt.want) { |
| t.Errorf("getDorisCoreConfigMapName() = %v, want %v", got, tt.want) |
| } |
| }) |
| } |
| } |