github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/api_suite_test.go (about)

     1  package api_test
     2  
     3  import (
     4  	"io/ioutil"
     5  	"net/http"
     6  	"net/http/httptest"
     7  	"sync"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/pf-qiu/concourse/v6/atc"
    12  
    13  	"code.cloudfoundry.org/clock/fakeclock"
    14  	"code.cloudfoundry.org/lager"
    15  	"code.cloudfoundry.org/lager/lagertest"
    16  
    17  	"github.com/pf-qiu/concourse/v6/atc/api"
    18  	"github.com/pf-qiu/concourse/v6/atc/api/accessor"
    19  	"github.com/pf-qiu/concourse/v6/atc/api/accessor/accessorfakes"
    20  	"github.com/pf-qiu/concourse/v6/atc/api/auth"
    21  	"github.com/pf-qiu/concourse/v6/atc/api/containerserver/containerserverfakes"
    22  	"github.com/pf-qiu/concourse/v6/atc/api/policychecker/policycheckerfakes"
    23  	"github.com/pf-qiu/concourse/v6/atc/auditor/auditorfakes"
    24  	"github.com/pf-qiu/concourse/v6/atc/creds"
    25  	"github.com/pf-qiu/concourse/v6/atc/creds/credsfakes"
    26  	"github.com/pf-qiu/concourse/v6/atc/db"
    27  	"github.com/pf-qiu/concourse/v6/atc/db/dbfakes"
    28  	"github.com/pf-qiu/concourse/v6/atc/gc/gcfakes"
    29  	"github.com/pf-qiu/concourse/v6/atc/policy"
    30  	"github.com/pf-qiu/concourse/v6/atc/worker/workerfakes"
    31  	"github.com/pf-qiu/concourse/v6/atc/wrappa"
    32  
    33  	. "github.com/onsi/ginkgo"
    34  	. "github.com/onsi/gomega"
    35  )
    36  
    37  var (
    38  	sink *lager.ReconfigurableSink
    39  
    40  	externalURL = "https://example.com"
    41  	clusterName = "Test Cluster"
    42  
    43  	fakeWorkerClient        *workerfakes.FakeClient
    44  	fakeVolumeRepository    *dbfakes.FakeVolumeRepository
    45  	fakeContainerRepository *dbfakes.FakeContainerRepository
    46  	fakeDestroyer           *gcfakes.FakeDestroyer
    47  	dbTeamFactory           *dbfakes.FakeTeamFactory
    48  	dbPipelineFactory       *dbfakes.FakePipelineFactory
    49  	dbJobFactory            *dbfakes.FakeJobFactory
    50  	dbResourceFactory       *dbfakes.FakeResourceFactory
    51  	dbResourceConfigFactory *dbfakes.FakeResourceConfigFactory
    52  	fakePipeline            *dbfakes.FakePipeline
    53  	fakeAccess              *accessorfakes.FakeAccess
    54  	fakeAccessor            *accessorfakes.FakeAccessFactory
    55  	dbWorkerFactory         *dbfakes.FakeWorkerFactory
    56  	dbWorkerTeamFactory     *dbfakes.FakeTeamFactory
    57  	dbWorkerLifecycle       *dbfakes.FakeWorkerLifecycle
    58  	build                   *dbfakes.FakeBuild
    59  	dbBuildFactory          *dbfakes.FakeBuildFactory
    60  	dbUserFactory           *dbfakes.FakeUserFactory
    61  	dbCheckFactory          *dbfakes.FakeCheckFactory
    62  	dbTeam                  *dbfakes.FakeTeam
    63  	dbWall                  *dbfakes.FakeWall
    64  	fakeSecretManager       *credsfakes.FakeSecrets
    65  	fakeVarSourcePool       *credsfakes.FakeVarSourcePool
    66  	fakePolicyChecker       *policycheckerfakes.FakePolicyChecker
    67  	credsManagers           creds.Managers
    68  	interceptTimeoutFactory *containerserverfakes.FakeInterceptTimeoutFactory
    69  	interceptTimeout        *containerserverfakes.FakeInterceptTimeout
    70  	isTLSEnabled            bool
    71  	cliDownloadsDir         string
    72  	logger                  *lagertest.TestLogger
    73  	fakeClock               *fakeclock.FakeClock
    74  
    75  	constructedEventHandler *fakeEventHandlerFactory
    76  
    77  	server *httptest.Server
    78  	client *http.Client
    79  )
    80  
    81  type fakeEventHandlerFactory struct {
    82  	build db.Build
    83  
    84  	lock sync.Mutex
    85  }
    86  
    87  func (f *fakeEventHandlerFactory) Construct(
    88  	logger lager.Logger,
    89  	build db.Build,
    90  ) http.Handler {
    91  	f.lock.Lock()
    92  	f.build = build
    93  	f.lock.Unlock()
    94  
    95  	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    96  		w.WriteHeader(http.StatusOK)
    97  		_, _ = w.Write([]byte("fake event handler factory was here"))
    98  	})
    99  }
   100  
   101  var _ = BeforeEach(func() {
   102  	dbTeamFactory = new(dbfakes.FakeTeamFactory)
   103  	dbWorkerTeamFactory = new(dbfakes.FakeTeamFactory)
   104  	dbPipelineFactory = new(dbfakes.FakePipelineFactory)
   105  	dbJobFactory = new(dbfakes.FakeJobFactory)
   106  	dbResourceFactory = new(dbfakes.FakeResourceFactory)
   107  	dbResourceConfigFactory = new(dbfakes.FakeResourceConfigFactory)
   108  	dbBuildFactory = new(dbfakes.FakeBuildFactory)
   109  	dbUserFactory = new(dbfakes.FakeUserFactory)
   110  	dbCheckFactory = new(dbfakes.FakeCheckFactory)
   111  	dbWall = new(dbfakes.FakeWall)
   112  
   113  	interceptTimeoutFactory = new(containerserverfakes.FakeInterceptTimeoutFactory)
   114  	interceptTimeout = new(containerserverfakes.FakeInterceptTimeout)
   115  	interceptTimeoutFactory.NewInterceptTimeoutReturns(interceptTimeout)
   116  
   117  	dbTeam = new(dbfakes.FakeTeam)
   118  	dbTeam.IDReturns(734)
   119  	dbTeamFactory.FindTeamReturns(dbTeam, true, nil)
   120  	dbTeamFactory.GetByIDReturns(dbTeam)
   121  	dbWorkerTeamFactory.FindTeamReturns(dbTeam, true, nil)
   122  	dbWorkerTeamFactory.GetByIDReturns(dbTeam)
   123  
   124  	fakeAccess = new(accessorfakes.FakeAccess)
   125  	fakeAccessor = new(accessorfakes.FakeAccessFactory)
   126  	fakeAccessor.CreateReturns(fakeAccess, nil)
   127  
   128  	fakePipeline = new(dbfakes.FakePipeline)
   129  	dbTeam.PipelineReturns(fakePipeline, true, nil)
   130  
   131  	dbWorkerFactory = new(dbfakes.FakeWorkerFactory)
   132  	dbWorkerLifecycle = new(dbfakes.FakeWorkerLifecycle)
   133  
   134  	fakeWorkerClient = new(workerfakes.FakeClient)
   135  
   136  	fakeVolumeRepository = new(dbfakes.FakeVolumeRepository)
   137  	fakeContainerRepository = new(dbfakes.FakeContainerRepository)
   138  	fakeDestroyer = new(gcfakes.FakeDestroyer)
   139  
   140  	fakeSecretManager = new(credsfakes.FakeSecrets)
   141  	fakeVarSourcePool = new(credsfakes.FakeVarSourcePool)
   142  	credsManagers = make(creds.Managers)
   143  
   144  	fakeClock = fakeclock.NewFakeClock(time.Unix(123, 456))
   145  
   146  	var err error
   147  	cliDownloadsDir, err = ioutil.TempDir("", "cli-downloads")
   148  	Expect(err).NotTo(HaveOccurred())
   149  
   150  	constructedEventHandler = &fakeEventHandlerFactory{}
   151  
   152  	logger = lagertest.NewTestLogger("api")
   153  
   154  	sink = lager.NewReconfigurableSink(lager.NewPrettySink(GinkgoWriter, lager.DEBUG), lager.DEBUG)
   155  
   156  	isTLSEnabled = false
   157  
   158  	build = new(dbfakes.FakeBuild)
   159  
   160  	checkPipelineAccessHandlerFactory := auth.NewCheckPipelineAccessHandlerFactory(dbTeamFactory)
   161  
   162  	checkBuildReadAccessHandlerFactory := auth.NewCheckBuildReadAccessHandlerFactory(dbBuildFactory)
   163  
   164  	checkBuildWriteAccessHandlerFactory := auth.NewCheckBuildWriteAccessHandlerFactory(dbBuildFactory)
   165  
   166  	checkWorkerTeamAccessHandlerFactory := auth.NewCheckWorkerTeamAccessHandlerFactory(dbWorkerFactory)
   167  
   168  	fakePolicyChecker = new(policycheckerfakes.FakePolicyChecker)
   169  	fakePolicyChecker.CheckReturns(policy.PassedPolicyCheck(), nil)
   170  
   171  	apiWrapper := wrappa.MultiWrappa{
   172  		wrappa.NewPolicyCheckWrappa(logger, fakePolicyChecker),
   173  		wrappa.NewAPIAuthWrappa(
   174  			checkPipelineAccessHandlerFactory,
   175  			checkBuildReadAccessHandlerFactory,
   176  			checkBuildWriteAccessHandlerFactory,
   177  			checkWorkerTeamAccessHandlerFactory,
   178  		),
   179  	}
   180  
   181  	handler, err := api.NewHandler(
   182  		logger,
   183  
   184  		externalURL,
   185  		clusterName,
   186  
   187  		apiWrapper,
   188  
   189  		dbTeamFactory,
   190  		dbPipelineFactory,
   191  		dbJobFactory,
   192  		dbResourceFactory,
   193  		dbWorkerFactory,
   194  		dbWorkerTeamFactory,
   195  		fakeVolumeRepository,
   196  		fakeContainerRepository,
   197  		fakeDestroyer,
   198  		dbBuildFactory,
   199  		dbCheckFactory,
   200  		dbResourceConfigFactory,
   201  		dbUserFactory,
   202  
   203  		constructedEventHandler.Construct,
   204  
   205  		fakeWorkerClient,
   206  
   207  		sink,
   208  
   209  		isTLSEnabled,
   210  
   211  		cliDownloadsDir,
   212  		"1.2.3",
   213  		"4.5.6",
   214  		fakeSecretManager,
   215  		fakeVarSourcePool,
   216  		credsManagers,
   217  		interceptTimeoutFactory,
   218  		time.Second,
   219  		dbWall,
   220  		fakeClock,
   221  	)
   222  
   223  	atc.EnablePipelineInstances = true
   224  
   225  	Expect(err).NotTo(HaveOccurred())
   226  
   227  	accessorHandler := accessor.NewHandler(
   228  		logger,
   229  		"some-action",
   230  		handler,
   231  		fakeAccessor,
   232  		new(auditorfakes.FakeAuditor),
   233  		map[string]string{},
   234  	)
   235  
   236  	handler = wrappa.LoggerHandler{
   237  		Logger:  logger,
   238  		Handler: accessorHandler,
   239  	}
   240  
   241  	server = httptest.NewServer(handler)
   242  
   243  	client = &http.Client{
   244  		Transport: &http.Transport{},
   245  	}
   246  })
   247  
   248  var _ = AfterEach(func() {
   249  	server.Close()
   250  })
   251  
   252  func TestAPI(t *testing.T) {
   253  	RegisterFailHandler(Fail)
   254  	RunSpecs(t, "API Suite")
   255  }