| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422 |
- // Copyright 2019 Yunion
- //
- // Licensed 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 adaptec
- import (
- "strings"
- "testing"
- "github.com/stretchr/testify/assert"
- )
- func Test_getAdaptorIndex(t *testing.T) {
- tests := []struct {
- name string
- args string
- want int
- }{
- {
- name: "Controllers found: 1",
- args: "Controllers found: 1",
- want: -1,
- },
- {
- name: " Controller 1: : Optimal, Slot 4, RAID (Expose RAW), Adaptec ASR8805, 6A2263667CA, 50000D1701B47780",
- args: " Controller 1: : Optimal, Slot 4, RAID (Expose RAW), Adaptec ASR8805, 6A2263667CA, 50000D1701B47780",
- want: 1,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if got := getAdaptorIndex(tt.args); got != tt.want {
- t.Errorf("getAdaptorIndex() = %v, want %v", got, tt.want)
- }
- })
- }
- }
- func Test_getAdaptorInfo(t *testing.T) {
- input := `Controllers found: 1
- ----------------------------------------------------------------------
- Controller information
- ----------------------------------------------------------------------
- Controller Status : Optimal
- Controller Mode : RAID (Expose RAW)
- Channel description : SAS/SATA
- Controller Model : Adaptec ASR8805
- Controller Serial Number : 6A2263667CA
- Controller World Wide Name : 50000D1701B47780
- Controller Alarm : Disabled
- Physical Slot : 4
- Temperature : 42 C/ 107 F (Normal)
- Installed memory : 1024 MB
- Host bus type : PCIe
- Host bus speed : 8000 MHz
- Host bus link width : 8 bit(s)/link(s)
- Global task priority : High
- Performance Mode : Default/Dynamic
- PCI Device ID : 653
- Stayawake period : Disabled
- Spinup limit internal drives : 0
- Spinup limit external drives : 0
- Defunct disk drive count : 0
- NCQ status : Enabled
- Statistics data collection mode : Disabled
- Monitor Log Severity Level : Informational
- Global Max SAS Phy Link Rate : 12 Gbps
- Verify Write Setting : Not Applicable
- Save Custom Defaults Setting : Disabled
- Smart Poll : Enabled
- Error Tunable Profile : Normal
- --------------------------------------------------------
- Cache Properties
- --------------------------------------------------------
- Controller Cache Preservation : Disabled
- Global Physical Device Write Cache Policy: Drive Specific
- --------------------------------------------------------
- RAID Properties
- --------------------------------------------------------
- Logical devices/Failed/Degraded : 0/0/0
- Copyback : Disabled
- Automatic Failover : Enabled
- Background consistency check : Disabled
- Background consistency check period : 0
- --------------------------------------------------------
- Controller BIOS Setting Information
- --------------------------------------------------------
- Runtime BIOS : Enabled
- Array BBS Support : Disabled
- Physical Drives Displayed during POST : Disabled
- Backplane Mode : IBPI
- BIOS Halt on Missing Drive Count : 255
- --------------------------------------------------------
- Controller Version Information
- --------------------------------------------------------
- BIOS : 7.18-0 (33556)
- Firmware : 7.18-0 (33556)
- Driver : 1.2-1 (50983)
- Boot Flash : 7.18-0 (33556)
- CPLD (Load version/ Flash version) : 8/ 11
- SEEPROM (Load version/ Flash version) : 1/ 1
- FCT Custom Init String Version : 0x0
- --------------------------------------------------------
- Controller Cache Backup Unit Information
- --------------------------------------------------------
- Overall Backup Unit Status : Not Present
- --------------------------------------------------------
- Connector information
- --------------------------------------------------------
- Connector #0
- Connector Name : CN0
- --------------------------------------
- Lane Information
- --------------------------------------
- Lane #0
- Channel ID : 0
- Device ID : 0
- SAS Address : 50000D1701B47780
- PHY Identifier : 3
- -----------------------------------
- Lane SAS Phy Information
- -----------------------------------
- SAS Address : 50000D1701B47780
- Lane #1
- Channel ID : 0
- Device ID : 1
- SAS Address : 50000D1701B47780
- PHY Identifier : 2
- -----------------------------------
- Lane SAS Phy Information
- -----------------------------------
- SAS Address : 50000D1701B47780
- Lane #2
- Channel ID : 0
- Device ID : 2
- SAS Address : 50000D1701B47780
- PHY Identifier : 0
- -----------------------------------
- Lane SAS Phy Information
- -----------------------------------
- SAS Address : 50000D1701B47780
- Lane #3
- Channel ID : 0
- Device ID : 3
- SAS Address : 50000D1701B47780
- PHY Identifier : 1
- -----------------------------------
- Lane SAS Phy Information
- -----------------------------------
- SAS Address : 50000D1701B47780
- Connector #1
- Connector Name : CN1
- --------------------------------------
- Lane Information
- --------------------------------------
- Lane #0
- Channel ID : 0
- Device ID : 4
- SAS Address : 50000D1701B47780
- PHY Identifier : 5
- -----------------------------------
- Lane SAS Phy Information
- -----------------------------------
- SAS Address : 50000D1701B47780
- Lane #1
- Channel ID : 0
- Device ID : 5
- SAS Address : 50000D1701B47780
- PHY Identifier : 6
- -----------------------------------
- Lane SAS Phy Information
- -----------------------------------
- SAS Address : 50000D1701B47780
- Lane #2
- Channel ID : 0
- Device ID : 6
- SAS Address : 50000D1701B47780
- PHY Identifier : 4
- -----------------------------------
- Lane SAS Phy Information
- -----------------------------------
- SAS Address : 50000D1701B47780
- Attached PHY Identifier : 0
- Attached SAS Address : 5000C50077893141
- Negotiated Logical Link Rate : PHY enabled - 6 Gbps
- Lane #3
- Channel ID : 0
- Device ID : 7
- SAS Address : 50000D1701B47780
- PHY Identifier : 7
- -----------------------------------
- Lane SAS Phy Information
- -----------------------------------
- SAS Address : 50000D1701B47780
- Attached PHY Identifier : 0
- Attached SAS Address : 50000395B839D9AE
- Negotiated Logical Link Rate : PHY enabled - 6 Gbps
- Command completed successfully.`
- lines := strings.Split(input, "\n")
- info, err := getAdaptorInfo(lines)
- if err != nil {
- t.Errorf("getAdaptorInfo: %v", err)
- }
- assert := assert.New(t)
- assert.Equal("Optimal", info.status)
- assert.Equal("RAID (Expose RAW)", info.mode)
- assert.Equal(true, info.isRaidExposeRawMode(), "should be raid expose raw mode")
- assert.Equal("Adaptec ASR8805", info.name)
- assert.Equal("6A2263667CA", info.sn)
- assert.Equal("50000D1701B47780", info.wwn)
- assert.Equal("4", info.slot)
- }
- func Test_getPhyDevices(t *testing.T) {
- input := `Controllers found: 1
- ----------------------------------------------------------------------
- Physical Device information
- ----------------------------------------------------------------------
- Device #0
- Device is a Hard drive
- State : Online
- Block Size : 512 Bytes
- Supported : Yes
- Programmed Max Speed : SAS 6.0 Gb/s
- Transfer Speed : SAS 6.0 Gb/s
- Reported Channel,Device(T:L) : 0,6(6:0)
- Reported Location : Connector 1, Device 2
- Vendor : SEAGATE
- Model : ST300MM0006
- Firmware : LS0A
- Serial number : S0K30A4N
- World-wide name : 5000C50077893140
- Reserved Size : 415982 KB
- Used Size : 285696 MB
- Unused Size : 64 KB
- Total Size : 286102 MB
- Write Cache : Disabled (write-through)
- FRU : None
- S.M.A.R.T. : No
- S.M.A.R.T. warnings : 0
- Power State : Full rpm
- Supported Power States : Full rpm,Powered off
- SSD : No
- Temperature : 34 C/ 93 F
- ----------------------------------------------------------------
- Device Phy Information
- ----------------------------------------------------------------
- Phy #0
- PHY Identifier : 0
- SAS Address : 5000C50077893141
- Attached PHY Identifier : 4
- Attached SAS Address : 50000D1701B47780
- Phy #1
- PHY Identifier : 1
- SAS Address : 5000C50077893142
- ----------------------------------------------------------------
- Runtime Error Counters
- ----------------------------------------------------------------
- Hardware Error Count : 0
- Medium Error Count : 0
- Parity Error Count : 0
- Link Failure Count : 0
- Aborted Command Count : 0
- SMART Warning Count : 0
- Device #1
- Device is a Hard drive
- State : Online
- Block Size : 512 Bytes
- Supported : Yes
- Programmed Max Speed : SAS 6.0 Gb/s
- Transfer Speed : SAS 6.0 Gb/s
- Reported Channel,Device(T:L) : 0,7(7:0)
- Reported Location : Connector 1, Device 3
- Vendor : TOSHIBA
- Model : AL13SEB300
- Firmware : DE0D
- Serial number : 84T0A31SFRD6
- World-wide name : 50000395B839D9AC
- Reserved Size : 415982 KB
- Used Size : 285696 MB
- Unused Size : 64 KB
- Total Size : 286102 MB
- Write Cache : Disabled (write-through)
- FRU : None
- S.M.A.R.T. : No
- S.M.A.R.T. warnings : 0
- Power State : Full rpm
- Supported Power States : Full rpm,Powered off
- SSD : No
- Temperature : 33 C/ 91 F
- ----------------------------------------------------------------
- Device Phy Information
- ----------------------------------------------------------------
- Phy #0
- PHY Identifier : 0
- SAS Address : 50000395B839D9AE
- Attached PHY Identifier : 7
- Attached SAS Address : 50000D1701B47780
- Phy #1
- PHY Identifier : 1
- SAS Address : 50000395B839D9AF
- ----------------------------------------------------------------
- Runtime Error Counters
- ----------------------------------------------------------------
- Hardware Error Count : 0
- Medium Error Count : 0
- Parity Error Count : 0
- Link Failure Count : 0
- Aborted Command Count : 0
- SMART Warning Count : 0
- Command completed successfully.`
- lines := strings.Split(input, "\n")
- devs := getPhyDevices(1, lines)
- assert := assert.New(t)
- assert.Equal(2, len(devs), "physical devices should be 2")
- dev1 := devs[0]
- assert.Equal("0", dev1.channelId)
- assert.Equal("6", dev1.deviceId)
- assert.Equal("Online", dev1.Status)
- assert.Equal("ST300MM0006", dev1.Model)
- assert.Equal(true, dev1.Rotate.Bool())
- dev2 := devs[1]
- assert.Equal("0", dev2.channelId)
- assert.Equal("7", dev2.deviceId)
- assert.Equal("Online", dev2.Status)
- assert.Equal("AL13SEB300", dev2.Model)
- assert.Equal(true, dev2.Rotate.Bool())
- }
- func Test_getLogicalVolums(t *testing.T) {
- input := `Controllers found: 1
- ----------------------------------------------------------------------
- Logical device information
- ----------------------------------------------------------------------
- Logical Device number 0
- Logical Device name : LogicalDrv 0
- Block Size of member drives : 512 Bytes
- RAID level : 1
- Unique Identifier : 7D30DCD4
- Status of Logical Device : Optimal
- Additional details : Quick initialized
- Size : 285686 MB
- Parity space : 285696 MB
- Interface Type : Serial Attached SCSI
- Device Type : HDD
- Read-cache setting : Enabled
- Read-cache status : On
- Write-cache setting : Enabled
- Write-cache status : On
- Partitioned : No
- Protected by Hot-Spare : No
- Bootable : Yes
- Failed stripes : No
- Power settings : Disabled
- --------------------------------------------------------
- Logical Device segment information
- --------------------------------------------------------
- Segment 0 : Present (286102MB, SAS, HDD, Connector:1, Device:2) S0K30A4N
- Segment 1 : Present (286102MB, SAS, HDD, Connector:1, Device:3) 84T0A31SFRD6
- Command completed successfully.`
- lines := strings.Split(input, "\n")
- lvs, err := getLogicalVolumes(1, lines)
- if err != nil {
- t.Errorf("getLogicalVolumes: %v", err)
- }
- assert := assert.New(t)
- assert.Equal(1, len(lvs), "logical volume len should be 1")
- lv := lvs[0]
- assert.Equal(1, lv.Adapter)
- assert.Equal(0, lv.Index)
- inputNoLV := `Controllers found: 1
- ----------------------------------------------------------------------
- Logical device information
- ----------------------------------------------------------------------
- No logical devices configured
- Command completed successfully.`
- lines = strings.Split(inputNoLV, "\n")
- lvs, err = getLogicalVolumes(1, lines)
- if err != nil {
- t.Errorf("getLogicalVolumes: %v", err)
- }
- assert.Equal(0, len(lvs), "logical volume len should be 0")
- }
|