* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* openFuyao is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
package config
import (
"testing"
)
func TestGetTemplateCorePercent(t *testing.T) {
templateTest := TemplateInfos{
"910": {
"vir01": &TemplateInfo{
Name: "vir01",
AiCore: 16,
AiCPU: 4,
TotalAiCore: 32,
TotalAiCpu: 8,
},
"vir02": &TemplateInfo{
Name: "vir02",
AiCore: 8,
AiCPU: 2,
TotalAiCore: 32,
TotalAiCpu: 8,
},
"full": &TemplateInfo{
Name: "full",
AiCore: 32,
AiCPU: 8,
TotalAiCore: 32,
TotalAiCpu: 8,
},
},
"910B": {
"vir01": &TemplateInfo{
Name: "vir01",
AiCore: 24,
AiCPU: 6,
TotalAiCore: 48,
TotalAiCpu: 12,
},
},
}
testCases := []struct {
name string
deviceType string
templateName string
expected float64
}{
{
name: "normal device type and template",
deviceType: "NPU-ASCEND-910",
templateName: "vir01",
expected: 0.5,
},
{
name: "another template",
deviceType: "NPU-ASCEND-910",
templateName: "vir02",
expected: 0.25,
},
{
name: "full card template",
deviceType: "NPU-ASCEND-910",
templateName: "full",
expected: 1.0,
},
{
name: "different chip type",
deviceType: "NPU-ASCEND-910B",
templateName: "vir01",
expected: 0.5,
},
{
name: "device type without prefix",
deviceType: "910",
templateName: "vir01",
expected: 0.5,
},
{
name: "device type not found",
deviceType: "NPU-ASCEND-999",
templateName: "vir01",
expected: -1,
},
{
name: "template not found",
deviceType: "NPU-ASCEND-910",
templateName: "nonexistent",
expected: -1,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
result := templateTest.GetTemplateCorePercent(tc.deviceType, tc.templateName)
if result == tc.expected {
t.Log("test succeed")
} else {
t.Errorf("test failed: expected %f, got %f", tc.expected, result)
}
})
}
}
func TestGetTemplateByName(t *testing.T) {
templateTest := TemplateInfos{
"910": {
"vir01": &TemplateInfo{
Name: "vir01",
AiCore: 16,
AiCPU: 4,
TotalAiCore: 32,
TotalAiCpu: 8,
},
"vir02": &TemplateInfo{
Name: "vir02",
AiCore: 8,
AiCPU: 2,
TotalAiCore: 32,
TotalAiCpu: 8,
},
},
}
testCases := []struct {
name string
deviceType string
templateName string
expected *TemplateInfo
}{
{
name: "normal device type and template",
deviceType: "NPU-ASCEND-910",
templateName: "vir01",
expected: &TemplateInfo{
Name: "vir01",
AiCore: 16,
AiCPU: 4,
TotalAiCore: 32,
TotalAiCpu: 8,
},
},
{
name: "another template",
deviceType: "NPU-ASCEND-910",
templateName: "vir02",
expected: &TemplateInfo{
Name: "vir02",
AiCore: 8,
AiCPU: 2,
TotalAiCore: 32,
TotalAiCpu: 8,
},
},
{
name: "device type without prefix",
deviceType: "910",
templateName: "vir01",
expected: &TemplateInfo{
Name: "vir01",
AiCore: 16,
AiCPU: 4,
TotalAiCore: 32,
TotalAiCpu: 8,
},
},
{
name: "empty template name returns first",
deviceType: "NPU-ASCEND-910",
templateName: "",
expected: &TemplateInfo{
Name: "vir01",
AiCore: 16,
AiCPU: 4,
TotalAiCore: 32,
TotalAiCpu: 8,
},
},
{
name: "device type not found",
deviceType: "NPU-ASCEND-999",
templateName: "vir01",
expected: nil,
},
{
name: "template not found",
deviceType: "NPU-ASCEND-910",
templateName: "nonexistent",
expected: nil,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
result := templateTest.getTemplateByName(tc.deviceType, tc.templateName)
if tc.expected == nil {
if result == nil {
t.Log("test succeed")
} else {
t.Errorf("test failed: expected nil, got %v", result)
}
} else {
if result != nil && result.Name == tc.expected.Name && result.AiCore == tc.expected.AiCore {
t.Log("test succeed")
} else {
t.Errorf("test failed: expected %v, got %v", tc.expected, result)
}
}
})
}
}