content: {-
    Copyright (c) Meta Platforms, Inc. and affiliates.
    All rights reserved.
  
    This source code is licensed under the BSD-style license found in the
    LICENSE file in the root directory of this source tree.
  -}
  
  module Glean.Glass.Regression.Util (withTestEnv, withTestEnvScm) where
  
  import qualified Haxl.Core as Haxl
  import Util.EventBase
  import Glean.Util.ConfigProvider
  import Glean.Impl.TestConfigProvider () -- don't use the real ConfigProvider in tests
  import Facebook.Fb303 ( withFb303 )
  import Logger.IO (withLogger)
  
  import Glean
  import Glean.Util.Some
  import Util.Time
  
  import Glean.Glass.Env as Glass
  import Glean.Glass.Repos
  import Glean.Glass.SnapshotBackend as SB
  import Glean.Glass.RepoMapping
  import Glean.Glass.SourceControl
  
  withTestEnv :: Backend b => b -> (Glass.Env -> IO a) -> IO a
  withTestEnv b = withTestEnvScm b (Some NilSourceControl)
  
  withTestEnvScm
    :: Backend b
    => b
    -> Some SourceControl
    -> (Glass.Env -> IO a)
    -> IO a
  withTestEnvScm backend scm f =
    withEventBaseDataplane $ \evp ->
    withConfigProvider defaultConfigOptions $ \cfgapi ->
    withLogger cfgapi $ \logger ->
    withFb303 "glass-test" $ \fb303 ->
    withLatestRepos backend scm Nothing Nothing (hours 1) $
      \latestGleanRepos ->
        f Glass.Env
          { gleanBackend = Some backend
          , snapshotBackend = Some SB.NilSnapshotBackend
          , gleanDB = Nothing
          , repoMapping = fixedRepoMapping
          , sourceControl = scm
          , tracer = mempty
          , haxlState = Haxl.stateEmpty
          , useSnapshotsForSymbolsList = pure True
          , allocationLimit = return Nothing
          , ..
          }
  