| // Copyright 2021 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Package device_test tests the exported APIs of the package device. |
| package device |
| |
| import ( |
| "testing" |
| |
| "github.com/google/go-cmp/cmp" |
| "go.chromium.org/chromiumos/config/go/test/api" |
| labapi "go.chromium.org/chromiumos/config/go/test/lab/api" |
| ) |
| |
| type expectEndpointResult struct { |
| ip *labapi.IpEndpoint |
| expected string |
| } |
| |
| // TestAddress the function Address to return the addresses of DUTs. |
| func TestAddress(t *testing.T) { |
| data := []expectEndpointResult{ |
| { |
| ip: &labapi.IpEndpoint{Address: "127.0.0.1", Port: 0}, |
| expected: "127.0.0.1", |
| }, |
| { |
| ip: &labapi.IpEndpoint{Address: "0:0:0:0:0:ffff:7f00:1", Port: 2}, |
| expected: "[0:0:0:0:0:ffff:7f00:1]:2", |
| }, |
| { |
| ip: &labapi.IpEndpoint{Address: "0:0:0:0:0:ffff:7f00:1", Port: 0}, |
| expected: "0:0:0:0:0:ffff:7f00:1", |
| }, |
| { |
| ip: &labapi.IpEndpoint{Address: "chromeos6-row17-rack5-host15.cros.corp.google.com", Port: 0}, |
| expected: "chromeos6-row17-rack5-host15.cros.corp.google.com", |
| }, |
| { |
| ip: &labapi.IpEndpoint{Address: "chromeos6-row17-rack5-host15", Port: 2555}, |
| expected: "chromeos6-row17-rack5-host15:2555", |
| }, |
| } |
| |
| for _, d := range data { |
| device := api.CrosTestRequest_Device{ |
| Dut: &labapi.Dut{ |
| Id: &labapi.Dut_Id{Value: "AnyId"}, |
| DutType: &labapi.Dut_Chromeos{Chromeos: &labapi.Dut_ChromeOS{Ssh: d.ip}}, |
| }, |
| } |
| got, err := Address(&device) |
| if err != nil { |
| t.Errorf("Cannot get address for dut %v: %v", &device, err) |
| } |
| if got != d.expected { |
| t.Errorf("Got %q from Address; wanted:%q", got, d.expected) |
| } |
| } |
| } |
| |
| // TestFillDUTInfo makes sure FillDUTInfo behaved as expected. |
| func TestFillDUTInfo(t *testing.T) { |
| expected := []*DutInfo{ |
| { |
| Addr: "127.0.0.1:2222", |
| Role: "", |
| Servo: "c6-r9-r7-labstation:9996", |
| DutServer: "cros-dut0:80", |
| ProvisionServer: "cros-provision0:80", |
| ServoHostname: "c6-r9-r7-labstation", |
| ServoPort: "9996", |
| Phase: "PHASE_UNSPECIFIED", |
| }, |
| { |
| Addr: "[0:0:0:0:0:ffff:7f00:1]:2", |
| Role: "cd1", |
| Servo: "c6-r8-r7-labstation:9999", |
| DutServer: "cros-dut1:80", |
| ProvisionServer: "cros-provision1:80", |
| ServoHostname: "c6-r8-r7-labstation", |
| ServoPort: "9999", |
| Phase: "PHASE_UNSPECIFIED", |
| }, |
| { |
| Addr: "c6-r8-rack7-host7", |
| Role: "cd2", |
| Servo: "c6-r7-r7-labstation:9999", |
| DutServer: "cros-dut2:80", |
| ProvisionServer: "cros-provision2:80", |
| ServoHostname: "c6-r7-r7-labstation", |
| ServoPort: "9999", |
| Phase: "PHASE_UNSPECIFIED", |
| }, |
| { |
| Addr: "0:0:0:0:0:ffff:7f00:1", |
| Role: "cd3", |
| Servo: "", |
| DutServer: "", |
| ProvisionServer: "", |
| Phase: "PHASE_UNSPECIFIED", |
| }, |
| } |
| input := []*api.CrosTestRequest_Device{ |
| { |
| Dut: &labapi.Dut{ |
| Id: &labapi.Dut_Id{Value: "AnyId"}, |
| DutType: &labapi.Dut_Chromeos{ |
| Chromeos: &labapi.Dut_ChromeOS{ |
| Ssh: &labapi.IpEndpoint{Address: "127.0.0.1", Port: 2222}, |
| Servo: &labapi.Servo{ |
| Present: true, |
| ServodAddress: &labapi.IpEndpoint{ |
| Address: "c6-r9-r7-labstation", |
| Port: 9996, |
| }, |
| }, |
| }, |
| }, |
| }, |
| DutServer: &labapi.IpEndpoint{Address: "cros-dut0", Port: 80}, |
| ProvisionServer: &labapi.IpEndpoint{Address: "cros-provision0", Port: 80}, |
| }, |
| { |
| Dut: &labapi.Dut{ |
| Id: &labapi.Dut_Id{Value: "AnyId"}, |
| DutType: &labapi.Dut_Chromeos{ |
| Chromeos: &labapi.Dut_ChromeOS{ |
| Ssh: &labapi.IpEndpoint{Address: "0:0:0:0:0:ffff:7f00:1", Port: 2}, |
| Servo: &labapi.Servo{ |
| Present: true, |
| ServodAddress: &labapi.IpEndpoint{ |
| Address: "c6-r8-r7-labstation", |
| Port: 9999, |
| }, |
| }, |
| }, |
| }, |
| }, |
| DutServer: &labapi.IpEndpoint{Address: "cros-dut1", Port: 80}, |
| ProvisionServer: &labapi.IpEndpoint{Address: "cros-provision1", Port: 80}, |
| }, |
| { |
| Dut: &labapi.Dut{ |
| Id: &labapi.Dut_Id{Value: "AnyId"}, |
| DutType: &labapi.Dut_Chromeos{ |
| Chromeos: &labapi.Dut_ChromeOS{ |
| Ssh: &labapi.IpEndpoint{Address: "c6-r8-rack7-host7", Port: 0}, |
| Servo: &labapi.Servo{ |
| Present: true, |
| ServodAddress: &labapi.IpEndpoint{ |
| Address: "c6-r7-r7-labstation", |
| Port: 9999, |
| }, |
| }, |
| }, |
| }, |
| }, |
| DutServer: &labapi.IpEndpoint{Address: "cros-dut2", Port: 80}, |
| ProvisionServer: &labapi.IpEndpoint{Address: "cros-provision2", Port: 80}, |
| }, |
| { |
| Dut: &labapi.Dut{ |
| Id: &labapi.Dut_Id{Value: "AnyId"}, |
| DutType: &labapi.Dut_Chromeos{ |
| Chromeos: &labapi.Dut_ChromeOS{ |
| Ssh: &labapi.IpEndpoint{Address: "0:0:0:0:0:ffff:7f00:1", Port: 0}, |
| }, |
| }, |
| }, |
| }, |
| } |
| |
| for i, wanted := range expected { |
| dut := input[i] |
| got, err := FillDUTInfo(dut, wanted.Role) |
| if err != nil { |
| t.Errorf("Cannot get address for dut %v: %v", dut, err) |
| } |
| if diff := cmp.Diff(got, wanted); diff != "" { |
| t.Errorf("FillDUTInfo mismatch (-got +want):\n%s", diff) |
| } |
| } |
| } |
| |
| // TestFillDUTInfo makes sure FillDUTInfo behaved as expected. |
| func TestFillDUTInfoExtended(t *testing.T) { |
| expected := []*DutInfo{ |
| { |
| Addr: "127.0.0.1:2222", |
| Role: "", |
| Servo: "127.123.332.121:1337", |
| DutServer: "cros-dut0:80", |
| ProvisionServer: "cros-provision0:80", |
| Board: "Fred", |
| Model: "Flintstone", |
| ServoHostname: "127.123.332.121", |
| ServoPort: "1337", |
| ServoSerial: "8675309", |
| ChameleonAudio: true, |
| ChamelonPresent: true, |
| ChamelonPeriphsList: []string{"chameleon:vga", "chameleon:hdmi"}, |
| AtrusAudio: true, |
| TouchMimo: true, |
| CameraboxFacing: "front", |
| CableList: []string{"type:usbaudio"}, |
| Phase: "DVT", |
| Sku: "123", |
| HwIDList: []string{"hwid_component:hwid123"}, |
| CacheServer: "cache1:8001", |
| HWID: "Atlas 123-34", |
| }, |
| } |
| input := []*api.CrosTestRequest_Device{ |
| { |
| Dut: &labapi.Dut{ |
| Id: &labapi.Dut_Id{Value: "AnyId"}, |
| DutType: &labapi.Dut_Chromeos{ |
| Chromeos: &labapi.Dut_ChromeOS{ |
| Ssh: &labapi.IpEndpoint{Address: "127.0.0.1", Port: 2222}, |
| Servo: &labapi.Servo{ |
| Present: true, |
| ServodAddress: &labapi.IpEndpoint{ |
| Address: "127.123.332.121", |
| Port: 1337, |
| }, |
| Serial: "8675309", |
| }, |
| DutModel: &labapi.DutModel{ |
| BuildTarget: "Fred", |
| ModelName: "Flintstone", |
| }, |
| Chameleon: &labapi.Chameleon{ |
| Peripherals: []labapi.Chameleon_Peripheral{ |
| labapi.Chameleon_VGA, |
| labapi.Chameleon_HDMI, |
| }, |
| AudioBoard: true, |
| }, |
| Audio: &labapi.Audio{ |
| Atrus: true, |
| }, |
| Touch: &labapi.Touch{ |
| Mimo: true, |
| }, |
| |
| Camerabox: &labapi.Camerabox{ |
| Facing: labapi.Camerabox_FRONT, |
| }, |
| Cables: []*labapi.Cable{ |
| { |
| Type: labapi.Cable_USBAUDIO, |
| }, |
| }, |
| Phase: labapi.Phase_DVT, |
| Sku: "123", |
| HwidComponent: []string{"hwid123"}, |
| Hwid: "Atlas 123-34", |
| }, |
| }, |
| CacheServer: &labapi.CacheServer{Address: &labapi.IpEndpoint{Address: "cache1", Port: 8001}}, |
| }, |
| DutServer: &labapi.IpEndpoint{Address: "cros-dut0", Port: 80}, |
| ProvisionServer: &labapi.IpEndpoint{Address: "cros-provision0", Port: 80}, |
| }, |
| } |
| |
| for i, wanted := range expected { |
| dut := input[i] |
| got, err := FillDUTInfo(dut, wanted.Role) |
| if err != nil { |
| t.Errorf("Cannot get address for dut %v: %v", dut, err) |
| } |
| if diff := cmp.Diff(got, wanted); diff != "" { |
| t.Errorf("FillDUTInfo mismatch (-got +want):\n%s", diff) |
| } |
| } |
| } |
| |
| // TestFillAndroidInfo makes sure FillAndroidInfo behaved as expected. |
| func TestFillAndroidInfo(t *testing.T) { |
| expected := []*AndroidInfo{ |
| { |
| AssoicateAddr: "host1", |
| Serial: "ABC123", |
| ModelName: "pixel6", |
| }, |
| { |
| AssoicateAddr: "127.0.0.1:2222", |
| Serial: "DEF456", |
| ModelName: "pixel7", |
| }, |
| } |
| input := []*api.CrosTestRequest_Device{ |
| { |
| Dut: &labapi.Dut{ |
| Id: &labapi.Dut_Id{Value: "AnyId"}, |
| DutType: &labapi.Dut_Android_{ |
| Android: &labapi.Dut_Android{ |
| AssociatedHostname: &labapi.IpEndpoint{Address: "host1"}, |
| SerialNumber: "ABC123", |
| DutModel: &labapi.DutModel{ |
| BuildTarget: "abc", |
| ModelName: "pixel6", |
| }, |
| }, |
| }, |
| }, |
| }, |
| { |
| Dut: &labapi.Dut{ |
| Id: &labapi.Dut_Id{Value: "AnyId"}, |
| DutType: &labapi.Dut_Android_{ |
| Android: &labapi.Dut_Android{ |
| AssociatedHostname: &labapi.IpEndpoint{Address: "127.0.0.1", Port: 2222}, |
| SerialNumber: "DEF456", |
| DutModel: &labapi.DutModel{ |
| BuildTarget: "abc", |
| ModelName: "pixel7", |
| }, |
| }, |
| }, |
| }, |
| }, |
| } |
| |
| for i, wanted := range expected { |
| android := input[i] |
| got := FillAndroidInfo(android) |
| if diff := cmp.Diff(got, wanted); diff != "" { |
| t.Errorf("FillAndroidInfo mismatch (-got +want):\n%s", diff) |
| } |
| } |
| } |