1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/chromeos/login/hwid_checker.h"
6
7#include "testing/gtest/include/gtest/gtest.h"
8
9
10namespace chromeos {
11
12TEST(HWIDCheckerTest, EmptyHWID) {
13  EXPECT_FALSE(IsHWIDCorrect(""));
14}
15
16TEST(HWIDCheckerTest, HWIDv2) {
17  EXPECT_TRUE(IsHWIDCorrect("SOME DATA 7861"));
18  EXPECT_FALSE(IsHWIDCorrect("SOME DATA 7861 "));
19  EXPECT_FALSE(IsHWIDCorrect("SOME DATA 786 1"));
20  EXPECT_FALSE(IsHWIDCorrect("SOME DATA 786"));
21  EXPECT_FALSE(IsHWIDCorrect("SOME DATA7861"));
22}
23
24TEST(HWIDCheckerTest, ExceptionalHWID) {
25  EXPECT_TRUE(IsHWIDCorrect("SPRING A7N3-BJKQ-E"));
26  EXPECT_TRUE(IsHWIDCorrect("SPRING A7N3-BJKK-3K"));
27  EXPECT_TRUE(IsHWIDCorrect("SPRING A7N3-BJKK-2GI"));
28  EXPECT_TRUE(IsHWIDCorrect("SPRING A7N3-BJKK-2MRO"));
29  EXPECT_TRUE(IsHWIDCorrect("SPRING A7N3-BJKK-2MDG-V"));
30  EXPECT_TRUE(IsHWIDCorrect("SPRING DAKB-NM"));
31  EXPECT_TRUE(IsHWIDCorrect("FALCO APOM-3"));
32
33  // Not exceptions.
34  EXPECT_FALSE(IsHWIDCorrect("SPRING 3A7N-BJKZ-F"));
35  EXPECT_FALSE(IsHWIDCorrect("SPRING LA7N-BJK7-H"));
36  EXPECT_FALSE(IsHWIDCorrect("FALCO BPO6-C"));
37
38  // Degenerate cases.
39  EXPECT_FALSE(IsHWIDCorrect("SPRING"));
40  EXPECT_FALSE(IsHWIDCorrect("SPRING "));
41  EXPECT_FALSE(IsHWIDCorrect("SPRING KD"));
42  EXPECT_FALSE(IsHWIDCorrect("SPRING T7"));
43
44  // No board name.
45  EXPECT_FALSE(IsHWIDCorrect(" CA7N-BJKV-T"));
46  EXPECT_FALSE(IsHWIDCorrect("CA7N-BJKH-S"));
47
48  // Excess fields.
49  EXPECT_FALSE(IsHWIDCorrect("SPRING WINTER CA7N-BJK7-T"));
50  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7N-BJKN-D WINTER"));
51
52  // Incorrect BOM format.
53  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7-NBJK-YO"));
54  EXPECT_FALSE(IsHWIDCorrect("SPRING CA-7NBJ-KYO"));
55  EXPECT_FALSE(IsHWIDCorrect("SPRING -CA7N-BJKY-O"));
56  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7N-BJKK-FS-UN"));
57
58  // Incorrect characters.
59  EXPECT_FALSE(IsHWIDCorrect("SPRING CA9N-BJKL-P"));
60  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7N-B0KT-S"));
61  EXPECT_FALSE(IsHWIDCorrect("SPrING CA7N-BJKH-W"));
62
63  // Random changes.
64  EXPECT_FALSE(IsHWIDCorrect("SPRUNG CA7N-BJKY-O"));
65  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7N-8JKY-O"));
66  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7N-BJSY-O"));
67  EXPECT_FALSE(IsHWIDCorrect("SPRINGS CA7N-BJKY-O"));
68  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7N-BJKM-L"));
69  EXPECT_FALSE(IsHWIDCorrect("SPRINGXCA7N-BJKZ-F"));
70}
71
72TEST(HWIDCheckerTest, HWIDv3) {
73  EXPECT_TRUE(IsHWIDCorrect("SPRING E2B-C3D-E8X"));
74  EXPECT_TRUE(IsHWIDCorrect("SPRING E2B-C3D-E8X-D8J"));
75  EXPECT_TRUE(IsHWIDCorrect("FALCO B67-36Y"));
76
77  // Exceptions.
78  EXPECT_FALSE(IsHWIDCorrect("SPRING D2B-C3D-E5D"));
79  EXPECT_FALSE(IsHWIDCorrect("SPRING A2B-C3D-E8X-D7T"));
80  EXPECT_FALSE(IsHWIDCorrect("FALCO A67-35W"));
81
82  // Degenerate cases.
83  EXPECT_FALSE(IsHWIDCorrect("SPRING"));
84  EXPECT_FALSE(IsHWIDCorrect("SPRING "));
85  EXPECT_TRUE(IsHWIDCorrect("SPRING Z34"));
86
87  // No board name.
88  EXPECT_FALSE(IsHWIDCorrect(" C7N-J3V-T4J"));
89  EXPECT_FALSE(IsHWIDCorrect("C7N-J3V-T2I"));
90
91  // Excess fields.
92  EXPECT_FALSE(IsHWIDCorrect("SPRING WINTER E2B-C3D-E3K"));
93  EXPECT_FALSE(IsHWIDCorrect("SPRING E2B-C3D-E72 WINTER"));
94
95  // Incorrect BOM format.
96  EXPECT_FALSE(IsHWIDCorrect("SPRING E2BC3D-E8X"));
97  EXPECT_FALSE(IsHWIDCorrect("SPRING E2-B-C3D-E8X"));
98  EXPECT_FALSE(IsHWIDCorrect("SPRING E2B-C3D-E8X-"));
99  EXPECT_FALSE(IsHWIDCorrect("SPRING E2B-C3D-E85-Y"));
100
101  // Incorrect characters.
102  EXPECT_FALSE(IsHWIDCorrect("SPrING E2B-C3D-E3P"));
103  EXPECT_FALSE(IsHWIDCorrect("SPRING EAB-C3D-E7Y"));
104  EXPECT_FALSE(IsHWIDCorrect("SPRING E2B-C1D-E3W"));
105  EXPECT_FALSE(IsHWIDCorrect("SPRING E28-C3D-E7Z"));
106
107  // Random changes.
108  EXPECT_FALSE(IsHWIDCorrect("SPRING E2L-C3D-E8X"));
109  EXPECT_FALSE(IsHWIDCorrect("SPRING E2B-C3D-X8X"));
110  EXPECT_FALSE(IsHWIDCorrect("SPRINGZE2B-C3D-E8X"));
111  EXPECT_FALSE(IsHWIDCorrect("SPRMNG E2B-C3D-E8X"));
112  EXPECT_FALSE(IsHWIDCorrect("SPRING E2B-C3D-EIX"));
113}
114
115TEST(HWIDCheckerTest, KnownHWIDs) {
116  EXPECT_TRUE(IsHWIDCorrect("DELL HORIZON MAGENTA 8992"));
117  EXPECT_FALSE(IsHWIDCorrect("DELL HORIZ0N MAGENTA 8992"));
118
119  EXPECT_TRUE(IsHWIDCorrect("DELL HORIZON MAGENTA DVT 4770"));
120  EXPECT_FALSE(IsHWIDCorrect("DELL MAGENTA HORIZON DVT 4770"));
121
122  EXPECT_TRUE(IsHWIDCorrect("SAMS ALEX GAMMA DVT 9247"));
123  EXPECT_FALSE(IsHWIDCorrect("SAMS ALPX GAMMA DVT 9247"));
124}
125
126} // namespace chromeos
127
128