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 }