2
* Copyright (C) 2012 10gen Inc.
4
* This program is free software: you can redistribute it and/or modify
5
* it under the terms of the GNU Affero General Public License, version 3,
6
* as published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU Affero General Public License for more details.
13
* You should have received a copy of the GNU Affero General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
#include "mongo/base/status.h"
18
#include "mongo/unittest/unittest.h"
22
using mongo::ErrorCodes;
25
TEST(Basic, Accessors) {
26
Status status(ErrorCodes::MaxError, "error", 9999);
27
ASSERT_EQUALS(status.code(), ErrorCodes::MaxError);
28
ASSERT_EQUALS(status.reason(), "error");
29
ASSERT_EQUALS(status.location(), 9999);
32
TEST(Basic, OKIsAValidStatus) {
33
Status status = Status::OK();
34
ASSERT_EQUALS(status.code(), ErrorCodes::OK);
37
TEST(Basic, Compare) {
38
Status errMax(ErrorCodes::MaxError, "error");
39
ASSERT_TRUE(errMax.compare(errMax));
40
ASSERT_FALSE(errMax.compare(Status::OK()));
42
Status errMaxWithLoc(ErrorCodes::MaxError, "error", 9998);
43
ASSERT_FALSE(errMaxWithLoc.compare(errMax));
47
Status orig(ErrorCodes::MaxError, "error");
48
ASSERT_EQUALS(orig.refCount(), 1);
51
ASSERT_EQUALS(dest.code(), ErrorCodes::MaxError);
52
ASSERT_EQUALS(dest.reason(), "error");
54
ASSERT_EQUALS(dest.refCount(), 2);
55
ASSERT_EQUALS(orig.refCount(), 2);
58
TEST(Cloning, OKIsNotRefCounted) {
59
ASSERT_EQUALS(Status::OK().refCount(), 0);
61
Status myOk = Status::OK();
62
ASSERT_EQUALS(myOk.refCount(), 0);
63
ASSERT_EQUALS(Status::OK().refCount(), 0);
66
TEST(Parsing, CodeToEnum) {
67
ASSERT_EQUALS(ErrorCodes::TypeMismatch, ErrorCodes::fromInt(ErrorCodes::TypeMismatch));
68
ASSERT_EQUALS(ErrorCodes::UnknownError, ErrorCodes::fromInt(ErrorCodes::UnknownError));
69
ASSERT_EQUALS(ErrorCodes::UnknownError, ErrorCodes::fromInt(ErrorCodes::MaxError));
70
ASSERT_EQUALS(ErrorCodes::OK, ErrorCodes::fromInt(0));
73
TEST(Parsing, StringToEnum) {
74
ASSERT_EQUALS(ErrorCodes::TypeMismatch, ErrorCodes::fromString("TypeMismatch"));
75
ASSERT_EQUALS(ErrorCodes::UnknownError, ErrorCodes::fromString("UnknownError"));
76
ASSERT_EQUALS(ErrorCodes::UnknownError, ErrorCodes::fromString("Garbage"));
77
ASSERT_EQUALS(ErrorCodes::OK, ErrorCodes::fromString("OK"));
80
} // unnamed namespace