15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// found in the LICENSE file.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "chrome/browser/chromeos/login/hwid_checker.h"
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace chromeos {
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST(HWIDCheckerTest, EmptyHWID) {
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect(""));
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST(HWIDCheckerTest, HWIDv2) {
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_TRUE(IsHWIDCorrect("SOME DATA 7861"));
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SOME DATA 7861 "));
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SOME DATA 786 1"));
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SOME DATA 786"));
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SOME DATA7861"));
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST(HWIDCheckerTest, ExceptionalHWID) {
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_TRUE(IsHWIDCorrect("SPRING A7N3-BJKQ-E"));
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_TRUE(IsHWIDCorrect("SPRING A7N3-BJKK-3K"));
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_TRUE(IsHWIDCorrect("SPRING A7N3-BJKK-2GI"));
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_TRUE(IsHWIDCorrect("SPRING A7N3-BJKK-2MRO"));
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_TRUE(IsHWIDCorrect("SPRING A7N3-BJKK-2MDG-V"));
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_TRUE(IsHWIDCorrect("SPRING DAKB-NM"));
315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  EXPECT_TRUE(IsHWIDCorrect("FALCO APOM-3"));
325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Not exceptions.
345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING 3A7N-BJKZ-F"));
355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING LA7N-BJK7-H"));
365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("FALCO BPO6-C"));
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
383464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch  // Degenerate cases.
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING"));
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING "));
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING KD"));
425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING T7"));
435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  // No board name.
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect(" CA7N-BJKV-T"));
465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("CA7N-BJKH-S"));
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  // Excess fields.
4906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING WINTER CA7N-BJK7-T"));
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7N-BJKN-D WINTER"));
5106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
5206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)  // Incorrect BOM format.
5306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7-NBJK-YO"));
5406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING CA-7NBJ-KYO"));
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING -CA7N-BJKY-O"));
5606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7N-BJKK-FS-UN"));
573464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch
585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  // Incorrect characters.
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING CA9N-BJKL-P"));
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7N-B0KT-S"));
615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPrING CA7N-BJKH-W"));
625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Random changes.
643464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch  EXPECT_FALSE(IsHWIDCorrect("SPRUNG CA7N-BJKY-O"));
655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7N-8JKY-O"));
665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7N-BJSY-O"));
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRINGS CA7N-BJKY-O"));
685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRING CA7N-BJKM-L"));
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_FALSE(IsHWIDCorrect("SPRINGXCA7N-BJKZ-F"));
705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}
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