blob: 587cb6a49ab961ea6c58ee8c45f557eaffda20e7 [file] [edit]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package deviceconfig
import (
"fmt"
"os"
"testing"
"go.chromium.org/chromiumos/config/go/payload"
"go.chromium.org/chromiumos/infra/proto/go/device"
luciproto "go.chromium.org/luci/common/proto"
"go.chromium.org/luci/common/testing/ftt"
"go.chromium.org/luci/common/testing/truth/assert"
"go.chromium.org/luci/common/testing/truth/should"
)
func TestParseConfigBundle(t *testing.T) {
ftt.Run("Test config bundle parsing", t, func(t *ftt.Test) {
var payloads payload.ConfigBundleList
// Refer to https://chromium.googlesource.com/chromiumos/config/+/refs/heads/master/test/project/fake/fake/config.star for unittest check
b, err := os.ReadFile("test_device_config_v2.jsonproto")
assert.NoErr(t, err)
err = luciproto.UnmarshalJSONWithNonStandardFieldMasks([]byte(b), &payloads)
assert.NoErr(t, err)
t.Run("Happy path", func(t *ftt.Test) {
assert.Loosely(t, payloads.GetValues(), should.HaveLength(1))
dcs := parseConfigBundle(payloads.GetValues()[0])
// 6 sku-less device configs & 7 real device configs
assert.Loosely(t, dcs, should.HaveLength(13))
for _, dc := range dcs {
assert.Loosely(t, dc.GetId().GetPlatformId().GetValue(), should.Equal("FAKE_PROGRAM"))
modelWithSku := fmt.Sprintf("%s:%s", dc.GetId().GetModelId().GetValue(), dc.GetId().GetVariantId().GetValue())
switch modelWithSku {
case "FAKE-REF-DESIGN:", "PROJECT-A:", "PROJECT-B:", "PROJECT-C:", "PROJECT-WL:", "PROJECT-U:":
// These are sku-less device config, every config entry is nil by default
assert.Loosely(t, dc.GetFormFactor(), should.Equal(device.Config_FORM_FACTOR_UNSPECIFIED))
assert.Loosely(t, dc.GetPower(), should.Equal(device.Config_POWER_SUPPLY_UNSPECIFIED))
assert.Loosely(t, dc.GetHardwareFeatures(), should.BeNil)
assert.Loosely(t, dc.GetStorage(), should.Equal(device.Config_STORAGE_UNSPECIFIED))
assert.Loosely(t, dc.GetCpu(), should.Equal(device.Config_ARCHITECTURE_UNDEFINED))
case "FAKE-REF-DESIGN:2147483647":
assert.Loosely(t, dc.GetFormFactor(), should.Equal(device.Config_FORM_FACTOR_CLAMSHELL))
assert.Loosely(t, dc.GetPower(), should.Equal(device.Config_POWER_SUPPLY_BATTERY))
assert.Loosely(t, dc.GetHardwareFeatures(), should.Match([]device.Config_HardwareFeature{
device.Config_HARDWARE_FEATURE_BLUETOOTH,
device.Config_HARDWARE_FEATURE_INTERNAL_DISPLAY,
device.Config_HARDWARE_FEATURE_STYLUS,
device.Config_HARDWARE_FEATURE_TOUCHPAD,
device.Config_HARDWARE_FEATURE_TOUCHSCREEN,
device.Config_HARDWARE_FEATURE_DETACHABLE_KEYBOARD,
}))
assert.Loosely(t, dc.GetStorage(), should.Equal(device.Config_STORAGE_MMC))
assert.Loosely(t, dc.GetCpu(), should.Equal(device.Config_ARCHITECTURE_UNDEFINED))
case "FAKE-REF-DESIGN:0":
fallthrough
case "FAKE-REF-DESIGN:2":
assert.Loosely(t, dc.GetFormFactor(), should.Equal(device.Config_FORM_FACTOR_CLAMSHELL))
assert.Loosely(t, dc.GetPower(), should.Equal(device.Config_POWER_SUPPLY_BATTERY))
assert.Loosely(t, dc.GetPower(), should.Equal(device.Config_POWER_SUPPLY_BATTERY))
assert.Loosely(t, dc.GetHardwareFeatures(), should.Match([]device.Config_HardwareFeature{
device.Config_HARDWARE_FEATURE_BLUETOOTH,
device.Config_HARDWARE_FEATURE_INTERNAL_DISPLAY,
device.Config_HARDWARE_FEATURE_STYLUS,
device.Config_HARDWARE_FEATURE_TOUCHPAD,
device.Config_HARDWARE_FEATURE_TOUCHSCREEN,
device.Config_HARDWARE_FEATURE_DETACHABLE_KEYBOARD,
}))
assert.Loosely(t, dc.GetStorage(), should.Equal(device.Config_STORAGE_SSD))
assert.Loosely(t, dc.GetCpu(), should.Equal(device.Config_ARCHITECTURE_UNDEFINED))
assert.Loosely(t, dc.GetEc(), should.Equal(device.Config_EC_CHROME))
case "PROJECT-A:32":
assert.Loosely(t, dc.GetFormFactor(), should.Equal(device.Config_FORM_FACTOR_CONVERTIBLE))
assert.Loosely(t, dc.GetPower(), should.Equal(device.Config_POWER_SUPPLY_BATTERY))
assert.Loosely(t, dc.GetHardwareFeatures(), should.Match([]device.Config_HardwareFeature{
device.Config_HARDWARE_FEATURE_BLUETOOTH,
device.Config_HARDWARE_FEATURE_INTERNAL_DISPLAY,
device.Config_HARDWARE_FEATURE_STYLUS,
device.Config_HARDWARE_FEATURE_TOUCHPAD,
device.Config_HARDWARE_FEATURE_TOUCHSCREEN,
device.Config_HARDWARE_FEATURE_DETACHABLE_KEYBOARD,
}))
assert.Loosely(t, dc.GetStorage(), should.Equal(device.Config_STORAGE_MMC))
assert.Loosely(t, dc.GetCpu(), should.Equal(device.Config_ARCHITECTURE_UNDEFINED))
case "PROJECT-B:33":
assert.Loosely(t, dc.GetFormFactor(), should.Equal(device.Config_FORM_FACTOR_CONVERTIBLE))
assert.Loosely(t, dc.GetPower(), should.Equal(device.Config_POWER_SUPPLY_BATTERY))
assert.Loosely(t, dc.GetHardwareFeatures(), should.Match([]device.Config_HardwareFeature{
device.Config_HARDWARE_FEATURE_BLUETOOTH,
device.Config_HARDWARE_FEATURE_INTERNAL_DISPLAY,
device.Config_HARDWARE_FEATURE_STYLUS,
device.Config_HARDWARE_FEATURE_TOUCHPAD,
device.Config_HARDWARE_FEATURE_TOUCHSCREEN,
device.Config_HARDWARE_FEATURE_DETACHABLE_KEYBOARD,
}))
assert.Loosely(t, dc.GetStorage(), should.Equal(device.Config_STORAGE_MMC))
assert.Loosely(t, dc.GetCpu(), should.Equal(device.Config_ARCHITECTURE_UNDEFINED))
case "PROJECT-C:34":
assert.Loosely(t, dc.GetFormFactor(), should.Equal(device.Config_FORM_FACTOR_CLAMSHELL))
assert.Loosely(t, dc.GetPower(), should.Equal(device.Config_POWER_SUPPLY_BATTERY))
assert.Loosely(t, dc.GetHardwareFeatures(), should.Match([]device.Config_HardwareFeature{
device.Config_HARDWARE_FEATURE_BLUETOOTH,
device.Config_HARDWARE_FEATURE_INTERNAL_DISPLAY,
device.Config_HARDWARE_FEATURE_STYLUS,
device.Config_HARDWARE_FEATURE_TOUCHPAD,
device.Config_HARDWARE_FEATURE_TOUCHSCREEN,
device.Config_HARDWARE_FEATURE_DETACHABLE_KEYBOARD,
}))
assert.Loosely(t, dc.GetStorage(), should.Equal(device.Config_STORAGE_NVME))
assert.Loosely(t, dc.GetCpu(), should.Equal(device.Config_ARCHITECTURE_UNDEFINED))
case "PROJECT-WL:64":
assert.Loosely(t, dc.GetFormFactor(), should.Equal(device.Config_FORM_FACTOR_CHROMEBIT))
assert.Loosely(t, dc.GetPower(), should.Equal(device.Config_POWER_SUPPLY_AC_ONLY))
assert.Loosely(t, dc.GetHardwareFeatures(), should.Match([]device.Config_HardwareFeature{
device.Config_HARDWARE_FEATURE_BLUETOOTH,
device.Config_HARDWARE_FEATURE_INTERNAL_DISPLAY,
device.Config_HARDWARE_FEATURE_TOUCHPAD,
device.Config_HARDWARE_FEATURE_TOUCHSCREEN,
device.Config_HARDWARE_FEATURE_DETACHABLE_KEYBOARD,
}))
assert.Loosely(t, dc.GetStorage(), should.Equal(device.Config_STORAGE_NVME))
assert.Loosely(t, dc.GetCpu(), should.Equal(device.Config_ARCHITECTURE_UNDEFINED))
case "PROJECT-U:75":
assert.Loosely(t, dc.GetFormFactor(), should.Equal(device.Config_FORM_FACTOR_CONVERTIBLE))
assert.Loosely(t, dc.GetPower(), should.Equal(device.Config_POWER_SUPPLY_BATTERY))
assert.Loosely(t, dc.GetHardwareFeatures(), should.Match([]device.Config_HardwareFeature{
device.Config_HARDWARE_FEATURE_BLUETOOTH,
device.Config_HARDWARE_FEATURE_INTERNAL_DISPLAY,
device.Config_HARDWARE_FEATURE_STYLUS,
device.Config_HARDWARE_FEATURE_TOUCHPAD,
device.Config_HARDWARE_FEATURE_TOUCHSCREEN,
device.Config_HARDWARE_FEATURE_DETACHABLE_KEYBOARD,
}))
assert.Loosely(t, dc.GetStorage(), should.Equal(device.Config_STORAGE_UFS))
assert.Loosely(t, dc.GetCpu(), should.Equal(device.Config_ARCHITECTURE_UNDEFINED))
default:
t.Errorf("Invalid model:sku: %s", modelWithSku)
}
}
})
})
}