github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/topgun/k8s/external_worker_test.go (about)

     1  package k8s_test
     2  
     3  import (
     4  	"time"
     5  
     6  	. "github.com/pf-qiu/concourse/v6/topgun"
     7  	. "github.com/onsi/ginkgo"
     8  	. "github.com/onsi/gomega"
     9  )
    10  
    11  var _ = Describe("external workers through separate deployments", func() {
    12  
    13  	const publicKey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC496FSYFcBAKgDtMsBAJiF/6/NxlXKP5UZecyEsedYuTt1GOgJTwaA1qZ1LmHsbfLDE68oDdiM4uvxfI4wtLhz57w3u0jOUxZ2JeF7SVwEf1nVqLn4Gh/f8GUNQGSyIp1zUD5Bx9fq0PAyQ47mt7Ufi84rcf8LKl7nzAIHTcdg2BvTkQN9bUGPaq/Pb1W2bKPAQy4OzXTSIyrAJ89TH2jFeaZfyxQFGbD9jVHH/yl0oiMrDeaRYgccE5II+KY7WoLjsBry/9Qf2ERELKTK4UeIGIqWci9lab1ti+GxFPPiC3krNFjo4jShV4eUs4cNIrjwNrxVaKPXmU6o7Y3Hpayx Concourse"
    14  
    15  	var (
    16  		atc Endpoint
    17  
    18  		workerKey        string
    19  		tsaPort          string
    20  		webDeployArgs    []string
    21  		workerDeployArgs []string
    22  	)
    23  
    24  	JustBeforeEach(func() {
    25  		setReleaseNameAndNamespace("xw")
    26  
    27  		By("creating a web only deployment in one namespace")
    28  		tsaPort = "2222"
    29  		helmArgs := append(webDeployArgs,
    30  			"--set=worker.enabled=false",
    31  			"--set=web.tsa.bindPort="+tsaPort,
    32  		)
    33  		deployConcourseChart(releaseName+"-web", helmArgs...)
    34  
    35  		By("creating a worker only deployment in another namespace")
    36  		helmArgs = append(workerDeployArgs,
    37  			"--set=postgresql.enabled=false",
    38  			"--set=web.enabled=false",
    39  			"--set=worker.replicas=1",
    40  			"--set=concourse.worker.tsa.hosts[0]="+releaseName+"-web-web-worker-gateway."+releaseName+"-web.svc.cluster.local:"+tsaPort,
    41  		)
    42  		deployConcourseChart(releaseName+"-worker", helmArgs...)
    43  
    44  		waitAllPodsInNamespaceToBeReady(namespace + "-worker")
    45  		waitAllPodsInNamespaceToBeReady(namespace + "-web")
    46  
    47  		atc = endpointFactory.NewServiceEndpoint(
    48  			namespace+"-web",
    49  			releaseName+"-web-web",
    50  			"8080",
    51  		)
    52  
    53  		fly.Login("test", "test", "http://"+atc.Address())
    54  
    55  	})
    56  
    57  	var waitForRunningWorker = func() {
    58  		By("waiting for a running worker")
    59  		Eventually(func() []Worker {
    60  			return getRunningWorkers(fly.GetWorkers())
    61  		}, 2*time.Minute, 10*time.Second).
    62  			Should(HaveLen(1))
    63  	}
    64  
    65  	var workerDoesntRegister = func() {
    66  		By("worker never registers")
    67  		Consistently(func() []Worker {
    68  			return getRunningWorkers(fly.GetWorkers())
    69  		}, 1*time.Minute, 10*time.Second).
    70  			Should(HaveLen(0))
    71  	}
    72  
    73  	AfterEach(func() {
    74  		atc.Close()
    75  		cleanupReleases()
    76  	})
    77  
    78  	Context("main team worker, webs only allow team workers", func() {
    79  		invalidGenericKey := "ssh-rsa ABCD1234 OnlyTeamWorkers"
    80  		Context("web with correct public key", func() {
    81  			BeforeEach(func() {
    82  				workerKey = publicKey
    83  				webDeployArgs = []string{
    84  					"--set=secrets.teamAuthorizedKeys[0].team=main",
    85  					"--set=secrets.teamAuthorizedKeys[0].key=" + workerKey,
    86  					"--set=secrets.workerKeyPub=" + invalidGenericKey,
    87  				}
    88  				workerDeployArgs = []string{
    89  					"--set=concourse.worker.team=main",
    90  				}
    91  			})
    92  
    93  			It("worker registers with team main", func() {
    94  				waitForRunningWorker()
    95  				worker := getRunningWorkers(fly.GetWorkers())
    96  				Expect(worker[0].Team).To(Equal("main"))
    97  			})
    98  		})
    99  
   100  		Context("web with invalid public key", func() {
   101  			BeforeEach(func() {
   102  				workerKey = "ssh-rsa 1234ABCD Concourse"
   103  				webDeployArgs = []string{
   104  					"--set=secrets.teamAuthorizedKeys[0].team=main",
   105  					"--set=secrets.teamAuthorizedKeys[0].key=" + workerKey,
   106  					"--set=secrets.workerKeyPub=" + invalidGenericKey,
   107  				}
   108  				workerDeployArgs = []string{
   109  					"--set=concourse.worker.team=main",
   110  				}
   111  			})
   112  
   113  			It("worker doesn't register", func() {
   114  				workerDoesntRegister()
   115  			})
   116  		})
   117  	})
   118  
   119  	Context("generic worker", func() {
   120  		Context("web with correct public key", func() {
   121  			BeforeEach(func() {
   122  				workerDeployArgs = []string{}
   123  				webDeployArgs = []string{}
   124  			})
   125  
   126  			It("worker registers with atc", func() {
   127  				waitForRunningWorker()
   128  				worker := getRunningWorkers(fly.GetWorkers())
   129  				Expect(worker[0].Team).To(Equal(""))
   130  			})
   131  		})
   132  
   133  		Context("web with invalid public key", func() {
   134  			BeforeEach(func() {
   135  				workerKey = "ssh-rsa 1234ABCD Concourse"
   136  				webDeployArgs = []string{
   137  					"--set=secrets.workerKeyPub=" + workerKey,
   138  				}
   139  			})
   140  
   141  			It("worker doesn't register", func() {
   142  				workerDoesntRegister()
   143  			})
   144  		})
   145  	})
   146  })