/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
/*
 *     Copyright 2011-2020 Couchbase, Inc.
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

#include <libcouchbase/couchbase.h>
#include <gtest/gtest.h>
#include <mocksupport/server.h>
#include <cstdlib>
#include "testutil.h"
#include "mock-unit-test.h"
#include "mock-environment.h"

static inline void doLcbCreate(lcb_INSTANCE **instance, const lcb_CREATEOPTS *options, MockEnvironment *env)
{
    lcb_STATUS err = lcb_create(instance, options);
    ASSERT_EQ(LCB_SUCCESS, err);
    env->postCreate(*instance);
}

/*
 * True when the test binary is being driven by a recognised CI runner.
 * Used by tests that re-run a request against the mock to ride out a
 * known mock-side flake (e.g. CouchbaseMock.jar's Mozilla Rhino view
 * indexer occasionally throwing inside NativeArray.js_sort and
 * returning an empty result instead of the dataset). Local runs keep
 * a single attempt so a real regression surfaces immediately; CI runs
 * widen the window so the matrix does not go red on a known mock bug.
 *
 * Recognises Jenkins (JENKINS_URL / BUILD_NUMBER) and the generic CI
 * convention (CI=true, set by GitHub Actions, GitLab CI, CircleCI,
 * Travis, etc.).
 */
static inline bool running_under_ci()
{
    return std::getenv("JENKINS_URL") != nullptr || std::getenv("BUILD_NUMBER") != nullptr ||
           std::getenv("CI") != nullptr;
}
