diff options
Diffstat (limited to 'security/nss/gtests/common')
-rw-r--r-- | security/nss/gtests/common/Makefile | 41 | ||||
-rw-r--r-- | security/nss/gtests/common/common.gyp | 35 | ||||
-rw-r--r-- | security/nss/gtests/common/gtest.gypi | 35 | ||||
-rw-r--r-- | security/nss/gtests/common/gtest.mk | 36 | ||||
-rw-r--r-- | security/nss/gtests/common/gtests.cc | 22 | ||||
-rw-r--r-- | security/nss/gtests/common/manifest.mn | 21 | ||||
-rw-r--r-- | security/nss/gtests/common/scoped_ptrs.h | 61 |
7 files changed, 251 insertions, 0 deletions
diff --git a/security/nss/gtests/common/Makefile b/security/nss/gtests/common/Makefile new file mode 100644 index 000000000..e17bc282c --- /dev/null +++ b/security/nss/gtests/common/Makefile @@ -0,0 +1,41 @@ +#! gmake +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +####################################################################### +# (1) Include initial platform-independent assignments (MANDATORY). # +####################################################################### + +include manifest.mn + +####################################################################### +# (2) Include "global" configuration information. (OPTIONAL) # +####################################################################### + +include $(CORE_DEPTH)/coreconf/config.mk + +####################################################################### +# (3) Include "component" configuration information. (OPTIONAL) # +####################################################################### + +####################################################################### +# (4) Include "local" platform-dependent assignments (OPTIONAL). # +####################################################################### + +include gtest.mk + +####################################################################### +# (5) Execute "global" rules. (OPTIONAL) # +####################################################################### + +include $(CORE_DEPTH)/coreconf/rules.mk + +####################################################################### +# (6) Execute "component" rules. (OPTIONAL) # +####################################################################### + +####################################################################### +# (7) Execute "local" rules. (OPTIONAL). # +####################################################################### diff --git a/security/nss/gtests/common/common.gyp b/security/nss/gtests/common/common.gyp new file mode 100644 index 000000000..c501eba6b --- /dev/null +++ b/security/nss/gtests/common/common.gyp @@ -0,0 +1,35 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +{ + 'includes': [ + '../../coreconf/config.gypi', + 'gtest.gypi', + ], + 'targets': [ + { + 'target_name': 'gtests', + 'type': 'executable', + 'sources': [ + 'gtests.cc' + ], + 'dependencies': [ + '<(DEPTH)/exports.gyp:nss_exports', + '<(DEPTH)/lib/nss/nss.gyp:nss3', + '<(DEPTH)/lib/util/util.gyp:nssutil3', + '<(DEPTH)/lib/smime/smime.gyp:smime3', + '<(DEPTH)/gtests/google_test/google_test.gyp:gtest', + '<(DEPTH)/cmd/lib/lib.gyp:sectool' + ] + } + ], + 'target_defaults': { + 'include_dirs': [ + '../../gtests/google_test/gtest/include', + '../../gtests/common' + ], + }, + 'variables': { + 'module': 'nss' + } +} diff --git a/security/nss/gtests/common/gtest.gypi b/security/nss/gtests/common/gtest.gypi new file mode 100644 index 000000000..c3bac327b --- /dev/null +++ b/security/nss/gtests/common/gtest.gypi @@ -0,0 +1,35 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +{ + 'includes': [ + '../../coreconf/config.gypi' + ], + 'target_defaults': { + 'conditions': [ + ['OS=="win"', { + 'libraries': [ + '-lws2_32', + ], + }], + ['OS=="android"', { + 'libraries': [ + '-lstdc++', + ], + }], + [ 'fuzz==1', { + 'defines': [ + 'UNSAFE_FUZZER_MODE', + ], + }], + ], + 'msvs_settings': { + 'VCCLCompilerTool': { + 'ExceptionHandling': 1, + 'PreprocessorDefinitions': [ + 'NOMINMAX', + ], + }, + }, + }, +} diff --git a/security/nss/gtests/common/gtest.mk b/security/nss/gtests/common/gtest.mk new file mode 100644 index 000000000..ecb324e67 --- /dev/null +++ b/security/nss/gtests/common/gtest.mk @@ -0,0 +1,36 @@ +#! gmake +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +include $(CORE_DEPTH)/cmd/platlibs.mk + +MKPROG = $(CCC) +MKSHLIB = $(CCC) $(DSO_LDOPTS) $(DARWIN_SDK_SHLIBFLAGS) + +# gtests pick up errors with signed/unsigned comparisons on some platforms +# even though we disabled -Wsign-compare. +# This catches that by enabling the warning. +# Only add -Wsign-compare if -Werror is enabled, lest we add it on the wrong +# platform. +ifeq (-Werror,$(filter -Werror -Wsign-compare,$(WARNING_CFLAGS))) +WARNING_CFLAGS += -Wsign-compare +endif +WARNING_CFLAGS := $(filter-out -w44018,$(WARNING_CFLAGS)) + +ifeq (WINNT,$(OS_ARCH)) + # -EHsc because gtest has exception handlers + OS_CFLAGS += -EHsc -nologo + # http://www.suodenjoki.dk/us/archive/2010/min-max.htm + OS_CFLAGS += -DNOMINMAX + + # Linking to winsock to get htonl + OS_LIBS += Ws2_32.lib + + # On windows, we need to create the parent directory + # Needed because we include files from a subdirectory + MAKE_OBJDIR = $(INSTALL) -D $(dir $@) +else + CXXFLAGS += -std=c++0x +endif diff --git a/security/nss/gtests/common/gtests.cc b/security/nss/gtests/common/gtests.cc new file mode 100644 index 000000000..c51437cb4 --- /dev/null +++ b/security/nss/gtests/common/gtests.cc @@ -0,0 +1,22 @@ +#include "nspr.h" +#include "nss.h" +#include "ssl.h" + +#include <cstdlib> + +#define GTEST_HAS_RTTI 0 +#include "gtest/gtest.h" + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + + NSS_NoDB_Init(nullptr); + NSS_SetDomesticPolicy(); + int rv = RUN_ALL_TESTS(); + + if (NSS_Shutdown() != SECSuccess) { + return 1; + } + + return rv; +} diff --git a/security/nss/gtests/common/manifest.mn b/security/nss/gtests/common/manifest.mn new file mode 100644 index 000000000..9834e42a0 --- /dev/null +++ b/security/nss/gtests/common/manifest.mn @@ -0,0 +1,21 @@ +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +CORE_DEPTH = ../.. +DEPTH = ../.. +MODULE = nss + +CPPSRCS = \ + gtests.cc \ + $(NULL) + +INCLUDES += -I$(CORE_DEPTH)/gtests/google_test/gtest/include \ + -I$(CORE_DEPTH)/gtests/common + +REQUIRES = gtest + +EXTRA_LIBS = $(DIST)/lib/$(LIB_PREFIX)gtest.$(LIB_SUFFIX) + +# NOTE: this is not actually used but required to build gtests.o +PROGRAM = gtests diff --git a/security/nss/gtests/common/scoped_ptrs.h b/security/nss/gtests/common/scoped_ptrs.h new file mode 100644 index 000000000..2a96ee94a --- /dev/null +++ b/security/nss/gtests/common/scoped_ptrs.h @@ -0,0 +1,61 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef scoped_ptrs_h__ +#define scoped_ptrs_h__ + +#include <memory> +#include "cert.h" +#include "keyhi.h" +#include "pk11pub.h" + +namespace nss_test { + +struct ScopedDelete { + void operator()(CERTCertificate* cert) { CERT_DestroyCertificate(cert); } + void operator()(CERTCertificateList* list) { + CERT_DestroyCertificateList(list); + } + void operator()(CERTCertList* list) { CERT_DestroyCertList(list); } + void operator()(CERTSubjectPublicKeyInfo* spki) { + SECKEY_DestroySubjectPublicKeyInfo(spki); + } + void operator()(PK11SlotInfo* slot) { PK11_FreeSlot(slot); } + void operator()(PK11SymKey* key) { PK11_FreeSymKey(key); } + void operator()(SECAlgorithmID* id) { SECOID_DestroyAlgorithmID(id, true); } + void operator()(SECItem* item) { SECITEM_FreeItem(item, true); } + void operator()(SECKEYPublicKey* key) { SECKEY_DestroyPublicKey(key); } + void operator()(SECKEYPrivateKey* key) { SECKEY_DestroyPrivateKey(key); } +}; + +template <class T> +struct ScopedMaybeDelete { + void operator()(T* ptr) { + if (ptr) { + ScopedDelete del; + del(ptr); + } + } +}; + +#define SCOPED(x) typedef std::unique_ptr<x, ScopedMaybeDelete<x> > Scoped##x + +SCOPED(CERTCertificate); +SCOPED(CERTCertificateList); +SCOPED(CERTCertList); +SCOPED(CERTSubjectPublicKeyInfo); +SCOPED(PK11SlotInfo); +SCOPED(PK11SymKey); +SCOPED(SECAlgorithmID); +SCOPED(SECItem); +SCOPED(SECKEYPublicKey); +SCOPED(SECKEYPrivateKey); + +#undef SCOPED + +} // namespace nss_test + +#endif |