Roll googletest to 1.8.0+.

This is the V8 equivalent to https://crrev.com/2779193002 and must be landed
before //build/secondary/{gtest,gmock} are removed from Chromium. This started
out as https://crrev.com/2847693002

The changes in tools/ were authored by yangguo@chromium.org and
initially shared in http://crrev.com/2849783003.

GoogleTest (gtest) and GoogleMock (gmock) are now hosted into the same
googletest repository. In order to cope with this, the googletest
repository is now sourced at third_party/googletest.

The file/directory layout of Google Test is not yet considered stable.
To minimize disruption while Google Test stabilizes, Chromium code will
be insulated from third_party/googletest.

* testing/gtest/include/gtest/ and testing/gmock/include/gmock have
  been populated with headers that forward into the appropriate
  locations of third_party/googletest

* testing/BUILD.gn has been populated with the targets
  //testing/gtest(:gtest_main) and //testing/gmock(:gmock_main),
  which depend on the appropriate //third_party/googletest targets.

All Chromium code should keep depending on the targets and
headers in testing/{gtest,gmock} for now.

BUG=chromium:630705

Change-Id: I12b07ae78c8039aeff6ada7a3335e4e2b5d308ab
Reviewed-on: https://chromium-review.googlesource.com/639953
Reviewed-by: Michael Achenbach <machenbach@chromium.org>
Commit-Queue: Victor Costan <pwnall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#52170}
This commit is contained in:
Victor Costan 2018-03-22 13:25:16 -07:00 committed by Commit Bot
parent 447d384802
commit 539e907258
31 changed files with 450 additions and 33 deletions

4
.gitignore vendored
View File

@ -55,14 +55,14 @@
/test/wasm-js
/test/wasm-spec-tests/tests
/test/wasm-spec-tests/tests.tar.gz
/testing/gmock
/testing/gtest
/third_party/*
!/third_party/binutils
!/third_party/eu-strip
!/third_party/inspector_protocol
!/third_party/colorama
/third_party/colorama/src
!/third_party/googletest
/third_party/googletest/src
/tools/clang
/tools/gcmole/gcmole-tools
/tools/gcmole/gcmole-tools.tar.gz

6
DEPS
View File

@ -40,16 +40,14 @@ deps = {
'url': Var('chromium_url') + '/external/colorama.git' + '@' + '799604a1041e9b3bc5d2789ecbd7e8db2e18e6b8',
'condition': 'checkout_android',
},
'v8/third_party/googletest/src':
Var('chromium_url') + '/external/github.com/google/googletest.git' + '@' + 'a325ad2db5deb623eab740527e559b81c0f39d65',
'v8/third_party/jinja2':
Var('chromium_url') + '/chromium/src/third_party/jinja2.git' + '@' + '45571de473282bd1d8b63a8dfcb1fd268d0635d2',
'v8/third_party/markupsafe':
Var('chromium_url') + '/chromium/src/third_party/markupsafe.git' + '@' + '8f45f5cfa0009d2a70589bcda0349b8cb2b72783',
'v8/tools/swarming_client':
Var('chromium_url') + '/infra/luci/client-py.git' + '@' + '88229872dd17e71658fe96763feaa77915d8cbd6',
'v8/testing/gtest':
Var('chromium_url') + '/external/github.com/google/googletest.git' + '@' + '6f8a66431cb592dad629028a50b3dd418a408c87',
'v8/testing/gmock':
Var('chromium_url') + '/external/googlemock.git' + '@' + '0421b6f358139f02e102c9c332ce19a33faf75be',
'v8/test/benchmarks/data':
Var('chromium_url') + '/v8/deps/third_party/benchmarks.git' + '@' + '05d7188267b4560491ff9155c5ee13e207ecd65f',
'v8/test/mozilla/data':

37
testing/gmock/BUILD.gn Normal file
View File

@ -0,0 +1,37 @@
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# The file/directory layout of Google Test is not yet considered stable. Until
# it stabilizes, Chromium code MUST use this target instead of reaching directly
# into //third_party/googletest.
import("//build_overrides/build.gni")
source_set("gmock") {
testonly = true
sources = [
"include/gmock/gmock-actions.h",
"include/gmock/gmock-generated-function-mockers.h",
"include/gmock/gmock-matchers.h",
"include/gmock/gmock.h",
]
deps = [
"//third_party/googletest:gmock",
]
public_configs = [
"//third_party/googletest:gmock_config",
"//third_party/googletest:gtest_config",
]
}
# The file/directory layout of Google Test is not yet considered stable. Until
# it stabilizes, Chromium code MUST use this target instead of reaching directly
# into //third_party/googletest.
source_set("gmock_main") {
testonly = true
deps = [
"//third_party/googletest:gmock_main",
]
}

2
testing/gmock/OWNERS Normal file
View File

@ -0,0 +1,2 @@
thakis@chromium.org
pwnall@chromium.org

View File

@ -0,0 +1,3 @@
include_rules = [
'+third_party/googletest/src/googlemock/include/gmock',
]

View File

@ -0,0 +1,10 @@
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The file/directory layout of Google Test is not yet considered stable. Until
// it stabilizes, Chromium code will use forwarding headers in testing/gtest
// and testing/gmock, instead of directly including files in
// third_party/googletest.
#include "third_party/googletest/src/googlemock/include/gmock/gmock-actions.h"

View File

@ -0,0 +1,10 @@
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The file/directory layout of Google Test is not yet considered stable. Until
// it stabilizes, Chromium code will use forwarding headers in testing/gtest
// and testing/gmock, instead of directly including files in
// third_party/googletest.
#include "third_party/googletest/src/googlemock/include/gmock/gmock-generated-function-mockers.h"

View File

@ -0,0 +1,10 @@
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The file/directory layout of Google Test is not yet considered stable. Until
// it stabilizes, Chromium code will use forwarding headers in testing/gtest
// and testing/gmock, instead of directly including files in
// third_party/googletest.
#include "third_party/googletest/src/googlemock/include/gmock/gmock-matchers.h"

View File

@ -0,0 +1,10 @@
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The file/directory layout of Google Test is not yet considered stable. Until
// it stabilizes, Chromium code will use forwarding headers in testing/gtest
// and testing/gmock, instead of directly including files in
// third_party/googletest.
#include "third_party/googletest/src/googlemock/include/gmock/gmock.h"

100
testing/gtest/BUILD.gn Normal file
View File

@ -0,0 +1,100 @@
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build_overrides/gtest.gni")
if (is_ios) {
import("//build/config/coverage/coverage.gni")
import("//build/config/ios/ios_sdk.gni")
import("//build/buildflag_header.gni")
}
config("gtest_direct_config") {
visibility = [ ":*" ]
defines = [ "UNIT_TEST" ]
}
# The file/directory layout of Google Test is not yet considered stable. Until
# it stabilizes, Chromium code MUST use this target instead of reaching directly
# into //third_party/googletest.
static_library("gtest") {
testonly = true
sources = [
"include/gtest/gtest-death-test.h",
"include/gtest/gtest-message.h",
"include/gtest/gtest-param-test.h",
"include/gtest/gtest-spi.h",
"include/gtest/gtest.h",
"include/gtest/gtest_prod.h",
# This is a workaround for the issues below.
#
# 1) This target needs to be a static_library (not a source set) on Mac to
# avoid the build errors in
# https://codereview.chromium.org/2779193002#msg82.
# 2) A static_library must have at least one source file, to avoid build
# errors on Mac and Windows. https://crbug.com/710334
# 3) A static_library with complete_static_lib = true, which would not
# require adding the empty file, will result in duplicate symbols on
# Android. https://codereview.chromium.org/2852613002/#ps20001
"empty.cc",
]
public_deps = [
"//third_party/googletest:gtest",
]
public_configs = [ ":gtest_direct_config" ]
if (gtest_include_multiprocess) {
sources += [
"../multiprocess_func_list.cc",
"../multiprocess_func_list.h",
]
}
if (gtest_include_platform_test) {
sources += [ "../platform_test.h" ]
}
if ((is_mac || is_ios) && gtest_include_objc_support) {
if (is_ios) {
set_sources_assignment_filter([])
}
sources += [
"../gtest_mac.h",
"../gtest_mac.mm",
]
if (gtest_include_platform_test) {
sources += [ "../platform_test_mac.mm" ]
}
set_sources_assignment_filter(sources_assignment_filter)
}
if (is_ios && gtest_include_ios_coverage) {
sources += [
"../coverage_util_ios.h",
"../coverage_util_ios.mm",
]
deps = [
":ios_enable_coverage",
]
}
}
# The file/directory layout of Google Test is not yet considered stable. Until
# it stabilizes, Chromium code MUST use this target instead of reaching directly
# into //third_party/googletest.
source_set("gtest_main") {
testonly = true
deps = [
"//third_party/googletest:gtest_main",
]
}
if (is_ios) {
buildflag_header("ios_enable_coverage") {
header = "ios_enable_coverage.h"
flags = [ "IOS_ENABLE_COVERAGE=$use_clang_coverage" ]
}
}

2
testing/gtest/OWNERS Normal file
View File

@ -0,0 +1,2 @@
thakis@chromium.org
pwnall@chromium.org

3
testing/gtest/empty.cc Normal file
View File

@ -0,0 +1,3 @@
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

View File

@ -0,0 +1,3 @@
include_rules = [
'+third_party/googletest/src/googletest/include/gtest',
]

View File

@ -0,0 +1,10 @@
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The file/directory layout of Google Test is not yet considered stable. Until
// it stabilizes, Chromium code will use forwarding headers in testing/gtest
// and testing/gmock, instead of directly including files in
// third_party/googletest.
#include "third_party/googletest/src/googletest/include/gtest/gtest-death-test.h"

View File

@ -0,0 +1,10 @@
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The file/directory layout of Google Test is not yet considered stable. Until
// it stabilizes, Chromium code will use forwarding headers in testing/gtest
// and testing/gmock, instead of directly including files in
// third_party/googletest.
#include "third_party/googletest/src/googletest/include/gtest/gtest-message.h"

View File

@ -0,0 +1,10 @@
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The file/directory layout of Google Test is not yet considered stable. Until
// it stabilizes, Chromium code will use forwarding headers in testing/gtest
// and testing/gmock, instead of directly including files in
// third_party/googletest.
#include "third_party/googletest/src/googletest/include/gtest/gtest-param-test.h"

View File

@ -0,0 +1,10 @@
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The file/directory layout of Google Test is not yet considered stable. Until
// it stabilizes, Chromium code will use forwarding headers in testing/gtest
// and testing/gmock, instead of directly including files in
// third_party/googletest.
#include "third_party/googletest/src/googletest/include/gtest/gtest-spi.h"

View File

@ -0,0 +1,10 @@
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The file/directory layout of Google Test is not yet considered stable. Until
// it stabilizes, Chromium code will use forwarding headers in testing/gtest
// and testing/gmock, instead of directly including files in
// third_party/googletest.
#include "third_party/googletest/src/googletest/include/gtest/gtest.h"

View File

@ -0,0 +1,10 @@
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The file/directory layout of Google Test is not yet considered stable. Until
// it stabilizes, Chromium code will use forwarding headers in testing/gtest
// and testing/gmock, instead of directly including files in
// third_party/googletest.
#include "third_party/googletest/src/googletest/include/gtest/gtest_prod.h"

144
third_party/googletest/BUILD.gn vendored Normal file
View File

@ -0,0 +1,144 @@
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
config("gtest_config") {
visibility = [ ":*" ] # gmock also shares this config.
defines = [
# Chromium always links googletest statically, so no API qualifier is
# necessary. The definition in gtest-port.h at the time of this writing
# causes crashes in content_browsertests.
"GTEST_API_=",
# In order to allow regex matches in gtest to be shared between Windows
# and other systems, we tell gtest to always use its internal engine.
"GTEST_HAS_POSIX_RE=0",
"GTEST_LANG_CXX11=1",
# ::testing::Combine, which is heavily used in Chromium, is gated on
# tr1::tuple. Upstream avoids using tr1::tuple on Visual Studio 2017+,
# because it causes warnings. We'll take (and ignore) the warnings to keep
# our ::testing::Combine.
"GTEST_HAS_TR1_TUPLE=1",
]
# Gtest headers need to be able to find themselves.
include_dirs = [ "src/googletest/include" ]
if (is_win) {
cflags = [ "/wd4800" ] # Unused variable warning.
}
}
config("gmock_config") {
# Gmock headers need to be able to find themselves.
include_dirs = [
"custom",
"src/googlemock/include",
]
}
# Do NOT depend on this directly. Use //testing/gtest instead.
# See README.chromium for details.
source_set("gtest") {
testonly = true
sources = [
"src/googletest/include/gtest/gtest-death-test.h",
"src/googletest/include/gtest/gtest-message.h",
"src/googletest/include/gtest/gtest-param-test.h",
"src/googletest/include/gtest/gtest-printers.h",
"src/googletest/include/gtest/gtest-spi.h",
"src/googletest/include/gtest/gtest-test-part.h",
"src/googletest/include/gtest/gtest-typed-test.h",
"src/googletest/include/gtest/gtest.h",
"src/googletest/include/gtest/gtest_pred_impl.h",
"src/googletest/include/gtest/internal/gtest-death-test-internal.h",
"src/googletest/include/gtest/internal/gtest-filepath.h",
"src/googletest/include/gtest/internal/gtest-internal.h",
"src/googletest/include/gtest/internal/gtest-linked_ptr.h",
"src/googletest/include/gtest/internal/gtest-param-util-generated.h",
"src/googletest/include/gtest/internal/gtest-param-util.h",
"src/googletest/include/gtest/internal/gtest-port.h",
"src/googletest/include/gtest/internal/gtest-string.h",
"src/googletest/include/gtest/internal/gtest-tuple.h",
"src/googletest/include/gtest/internal/gtest-type-util.h",
#"src/googletest/src/gtest-all.cc", # Not needed by our build.
"src/googletest/src/gtest-death-test.cc",
"src/googletest/src/gtest-filepath.cc",
"src/googletest/src/gtest-internal-inl.h",
"src/googletest/src/gtest-port.cc",
"src/googletest/src/gtest-printers.cc",
"src/googletest/src/gtest-test-part.cc",
"src/googletest/src/gtest-typed-test.cc",
"src/googletest/src/gtest.cc",
]
# Some files include "src/gtest-internal-inl.h".
include_dirs = [ "src/googletest" ]
all_dependent_configs = [ ":gtest_config" ]
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
}
# Do NOT depend on this directly. Use //testing/gtest:gtest_main instead.
# See README.chromium for details.
source_set("gtest_main") {
testonly = true
sources = [
"src/googletest/src/gtest_main.cc",
]
deps = [
":gtest",
]
}
# Do NOT depend on this directly. Use //testing/gmock:gmock_main instead.
# See README.chromium for details.
source_set("gmock") {
testonly = true
sources = [
"src/googlemock/include/gmock/gmock-actions.h",
"src/googlemock/include/gmock/gmock-cardinalities.h",
"src/googlemock/include/gmock/gmock-generated-actions.h",
"src/googlemock/include/gmock/gmock-generated-function-mockers.h",
"src/googlemock/include/gmock/gmock-generated-matchers.h",
"src/googlemock/include/gmock/gmock-generated-nice-strict.h",
"src/googlemock/include/gmock/gmock-matchers.h",
"src/googlemock/include/gmock/gmock-spec-builders.h",
"src/googlemock/include/gmock/gmock.h",
"src/googlemock/include/gmock/internal/gmock-generated-internal-utils.h",
"src/googlemock/include/gmock/internal/gmock-internal-utils.h",
"src/googlemock/include/gmock/internal/gmock-port.h",
# gmock helpers.
"custom/gmock/internal/custom/gmock-port.h",
#"src/googlemock/src/gmock-all.cc", # Not needed by our build.
"src/googlemock/src/gmock-cardinalities.cc",
"src/googlemock/src/gmock-internal-utils.cc",
"src/googlemock/src/gmock-matchers.cc",
"src/googlemock/src/gmock-spec-builders.cc",
"src/googlemock/src/gmock.cc",
]
public_configs = [
":gmock_config",
":gtest_config",
]
}
# Do NOT depend on this directly. Use //testing/gmock:gmock_main instead.
# See README.chromium for details.
static_library("gmock_main") {
testonly = true
sources = [
"src/googlemock/src/gmock_main.cc",
]
deps = [
":gmock",
]
}

2
third_party/googletest/OWNERS vendored Normal file
View File

@ -0,0 +1,2 @@
thakis@chromium.org
pwnall@chromium.org

17
third_party/googletest/README.chromium vendored Normal file
View File

@ -0,0 +1,17 @@
Name: Google Test: Google's C++ Testing Framework
Short Name: googletest
URL: https://github.com/google/googletest.git
Version: 1.8.0.git-7d15497f7538fb531d0f025929d080743af421ee
License: BSD
Security critical: no
Google Test is imported as-is, to facilitate version bumping. However, the
file/directory layout of Google Test is not yet considered stable. Therefore,
until Google Test's layout stabilizes, Chromium code MUST NOT depend on it
directly. Instead, Chromium code MUST:
* #include the headers in testing/gtest and testing/gmock
* use //testing/gtest(:gtest_main) and //testing/gmock(:gmock_main) in BUILD.gn
deps
This will allow us to adapt to Google Test changes with minimal disruption.

View File

@ -1,9 +1,7 @@
// Copyright 2016 the V8 project authors. All rights reserved.
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Copied from http://crrev.com/6ad76b419eacefc4/testing/gmock_custom/gmock/internal/custom/gmock-port.h
#ifndef TESTING_GMOCK_CUSTOM_GMOCK_INTERNAL_CUSTOM_GMOCK_PORT_H_
#define TESTING_GMOCK_CUSTOM_GMOCK_INTERNAL_CUSTOM_GMOCK_PORT_H_
@ -16,14 +14,12 @@ namespace std {
// <20120322 below implies pre-4.7.0. In addition we blacklist several version
// that released after 4.7.0 from pre-4.7.0 branch. 20120702 implies 4.5.4, and
// 20121127 implies 4.6.4.
#if defined(__GLIBCXX__) && \
(__GLIBCXX__ < 20120322 || \
__GLIBCXX__ == 20120702 || \
__GLIBCXX__ == 20121127)
#if defined(__GLIBCXX__) && \
(__GLIBCXX__ < 20120322 || __GLIBCXX__ == 20120702 || \
__GLIBCXX__ == 20121127)
template <typename T>
using is_default_constructible = std::is_constructible<T>;
#endif
}
#endif // TESTING_GMOCK_CUSTOM_GMOCK_INTERNAL_CUSTOM_GMOCK_PORT_H_

View File

@ -18,6 +18,7 @@
'../../src/',
'../../test/cctest/',
'../../testing/gtest/include/gtest/gtest_prod.h',
'../../third_party/googletest/src/googletest/include/gtest/gtest_prod.h',
'../../third_party/icu/source/',
],
},

View File

@ -18,12 +18,16 @@ TEST_DATA = os.path.join(BASE_DIR, 'testdata')
# Expectations.
EXPECTED_GITIGNORE = """
/testing/gtest/*
!/testing/gtest/include
/testing/gtest/include/*
!/testing/gtest/include/gtest
/testing/gtest/include/gtest/*
!/testing/gtest/include/gtest/gtest_prod.h
/third_party/googletest/*
!/third_party/googletest/src
/third_party/googletest/src/*
!/third_party/googletest/src/googletest
/third_party/googletest/src/googletest/*
!/third_party/googletest/src/googletest/include
/third_party/googletest/src/googletest/include/*
!/third_party/googletest/src/googletest/include/gtest
/third_party/googletest/src/googletest/include/gtest/*
!/third_party/googletest/src/googletest/include/gtest/gtest_prod.h
!/third_party/jinja2
!/third_party/markupsafe
/unrelated
@ -34,6 +38,7 @@ EXPECTED_GIT_DIFF = """
rename deps/v8/baz/{delete_me => v8_new} (100%)
delete mode 100644 deps/v8/include/v8-version.h
rename deps/v8/{delete_me => new/v8_new} (100%)
create mode 100644 deps/v8/third_party/googletest/src/googletest/include/gtest/gtest_prod.h
create mode 100644 deps/v8/third_party/jinja2/jinja2
create mode 100644 deps/v8/third_party/markupsafe/markupsafe
create mode 100644 deps/v8/v8_new
@ -43,9 +48,9 @@ ADDED_FILES = [
'v8_new',
'new/v8_new',
'baz/v8_new',
'testing/gtest/gtest_new',
'testing/gtest/new/gtest_new',
'testing/gtest/baz/gtest_new',
'/third_party/googletest/src/googletest/include/gtest/gtest_new',
'/third_party/googletest/src/googletest/include/gtest/new/gtest_new',
'/third_party/googletest/src/googletest/include/gtest/baz/gtest_new',
'third_party/jinja2/jinja2',
'third_party/markupsafe/markupsafe'
]

View File

@ -1,4 +1,3 @@
/unrelated
/testing/gtest
/third_party/jinja2
/third_party/markupsafe
/third_party/markupsafe

View File

@ -34,23 +34,27 @@ import node_common
TARGET_SUBDIR = os.path.join("deps", "v8")
SUB_REPOSITORIES = [ ["base", "trace_event", "common"],
["testing", "gtest"],
["third_party", "googletest", "src"],
["third_party", "jinja2"],
["third_party", "markupsafe"] ]
DELETE_FROM_GITIGNORE = [ "/base",
"/testing/gtest",
"/third_party/googletest/src",
"/third_party/jinja2",
"/third_party/markupsafe" ]
# Node.js requires only a single header file from gtest to build V8.
# Both jinja2 and markupsafe are required to generate part of the inspector.
ADD_TO_GITIGNORE = [ "/testing/gtest/*",
"!/testing/gtest/include",
"/testing/gtest/include/*",
"!/testing/gtest/include/gtest",
"/testing/gtest/include/gtest/*",
"!/testing/gtest/include/gtest/gtest_prod.h",
ADD_TO_GITIGNORE = [ "/third_party/googletest/*",
"!/third_party/googletest/src",
"/third_party/googletest/src/*",
"!/third_party/googletest/src/googletest",
"/third_party/googletest/src/googletest/*",
"!/third_party/googletest/src/googletest/include",
"/third_party/googletest/src/googletest/include/*",
"!/third_party/googletest/src/googletest/include/gtest",
"/third_party/googletest/src/googletest/include/gtest/*",
"!/third_party/googletest/src/googletest/include/gtest/gtest_prod.h",
"!/third_party/jinja2",
"!/third_party/markupsafe" ]

View File

@ -0,0 +1 @@
gtest_prod