Skip to content

Commit

Permalink
Maestro 3.0 - HostPort instead of NodePort
Browse files Browse the repository at this point in the history
  • Loading branch information
henrod committed Aug 7, 2017
1 parent 18d7635 commit d4b715e
Show file tree
Hide file tree
Showing 34 changed files with 1,066 additions and 659 deletions.
12 changes: 2 additions & 10 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Gopkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@

[[dependencies]]
name = "github.com/topfreegames/extensions"
version = "v2.6.4"
version = "v2.6.5"

[[dependencies]]
name = "github.com/go-redis/redis"
Expand Down
2 changes: 2 additions & 0 deletions api/api_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ var (
mockDb *pgmocks.MockDB
mockPipeline *redismocks.MockPipeliner
mockRedisClient *redismocks.MockRedisClient
mockClientset *fake.Clientset
mockEventForwarder1 *eventforwardermock.MockEventForwarder
mockEventForwarder2 *eventforwardermock.MockEventForwarder
mockLogin *mocks.MockLogin
Expand Down Expand Up @@ -70,6 +71,7 @@ var _ = BeforeEach(func() {
mockEventForwarder1 = eventforwardermock.NewMockEventForwarder(mockCtrl)
mockEventForwarder2 = eventforwardermock.NewMockEventForwarder(mockCtrl)
mockPipeline = redismocks.NewMockPipeliner(mockCtrl)
mockClientset = fake.NewSimpleClientset()

config, err = mtesting.GetDefaultConfig()

Expand Down
55 changes: 15 additions & 40 deletions api/app_int_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,10 @@ var _ = Describe("App", func() {
})

AfterEach(func() {
svcs, err := clientset.CoreV1().Services(configYaml.Name).List(listOptions)
pods, err := clientset.CoreV1().Pods(configYaml.Name).List(listOptions)
Expect(err).NotTo(HaveOccurred())
for _, svc := range svcs.Items {
room := models.NewRoom(svc.GetName(), svc.GetNamespace())
for _, pod := range pods.Items {
room := models.NewRoom(pod.GetName(), pod.GetNamespace())
err = room.ClearAll(app.RedisClient)
Expect(err).NotTo(HaveOccurred())
}
Expand Down Expand Up @@ -93,20 +93,17 @@ var _ = Describe("App", func() {
Expect(err).NotTo(HaveOccurred())
Expect(len(pods.Items)).To(Equal(configYaml.AutoScaling.Min))

svcs, err := clientset.CoreV1().Services(configYaml.Name).List(listOptions)
Expect(err).NotTo(HaveOccurred())
Expect(len(svcs.Items)).To(Equal(configYaml.AutoScaling.Min))

ns := configYaml.Name
sch := &models.Scheduler{Name: ns}
err = sch.Load(app.DB)
Expect(err).NotTo(HaveOccurred())
Expect(sch.YAML).NotTo(HaveLen(0))

for _, svc := range svcs.Items {
Expect(svc.Spec.Ports[0].Port).To(Equal(int32(8080)))
for _, pod := range pods.Items {
Expect(pod.Spec.Containers[0].Ports).To(HaveLen(1))
Expect(pod.Spec.Containers[0].Ports[0].HostPort).NotTo(BeZero())

room := models.NewRoom(svc.GetName(), ns)
room := models.NewRoom(pod.GetName(), ns)
err := room.Create(app.RedisClient)
Expect(err).NotTo(HaveOccurred())

Expand Down Expand Up @@ -201,20 +198,17 @@ var _ = Describe("App", func() {
Expect(err).NotTo(HaveOccurred())
Expect(len(pods.Items)).To(Equal(configYaml.AutoScaling.Min))

svcs, err := clientset.CoreV1().Services(configYaml.Name).List(listOptions)
Expect(err).NotTo(HaveOccurred())
Expect(len(svcs.Items)).To(Equal(configYaml.AutoScaling.Min))

ns := configYaml.Name
sch := &models.Scheduler{Name: ns}
err = sch.Load(app.DB)
Expect(err).NotTo(HaveOccurred())
Expect(sch.YAML).NotTo(HaveLen(0))

for _, svc := range svcs.Items {
Expect(svc.Spec.Ports[0].Port).To(Equal(int32(8080)))
for _, pod := range pods.Items {
Expect(pod.Spec.Containers[0].Ports).To(HaveLen(1))
Expect(pod.Spec.Containers[0].Ports[0].HostPort).NotTo(BeZero())

room := models.NewRoom(svc.GetName(), ns)
room := models.NewRoom(pod.GetName(), ns)
err := room.Create(app.RedisClient)
Expect(err).NotTo(HaveOccurred())

Expand Down Expand Up @@ -317,7 +311,7 @@ var _ = Describe("App", func() {
Expect(recorder.Body.String()).To(Equal(`{"success": true}`))
Expect(recorder.Code).To(Equal(http.StatusCreated))

svcsBefore, err := clientset.CoreV1().Services(configYaml.Name).List(listOptions)
podsBefore, err := clientset.CoreV1().Pods(configYaml.Name).List(listOptions)
Expect(err).NotTo(HaveOccurred())

// Delete the scheduler
Expand All @@ -335,10 +329,6 @@ var _ = Describe("App", func() {
Expect(err).NotTo(HaveOccurred())
Expect(pods.Items).To(BeEmpty())

svcs, err := clientset.CoreV1().Services(configYaml.Name).List(listOptions)
Expect(err).NotTo(HaveOccurred())
Expect(svcs.Items).To(BeEmpty())

ns := configYaml.Name
nameSpace := models.NewNamespace(ns)
exists, err := nameSpace.Exists(clientset)
Expand All @@ -350,8 +340,8 @@ var _ = Describe("App", func() {
Expect(err).NotTo(HaveOccurred())
Expect(sch.YAML).To(HaveLen(0))

for _, svc := range svcsBefore.Items {
room := models.NewRoom(svc.GetName(), ns)
for _, pod := range podsBefore.Items {
room := models.NewRoom(pod.GetName(), ns)

url = fmt.Sprintf("http://%s/scheduler/%s/rooms/%s/status", app.Address, sch.Name, room.ID)
request, err := http.NewRequest("PUT", url, mt.JSONFor(mt.JSON{
Expand Down Expand Up @@ -436,6 +426,7 @@ var _ = Describe("App", func() {
newConfigYaml, err := models.NewConfigYAML(scheduler.YAML)
newConfigYaml.Env = nil
newConfigYaml.Cmd = nil
configYaml.Ports[0].HostPort = newConfigYaml.Ports[0].HostPort
Expect(err).NotTo(HaveOccurred())
Expect(newConfigYaml).To(Equal(configYaml))
})
Expand Down Expand Up @@ -487,10 +478,6 @@ var _ = Describe("App", func() {
Expect(err).NotTo(HaveOccurred())
Expect(len(pods.Items)).To(Equal(configYaml.AutoScaling.Min))

svcs, err := clientset.CoreV1().Services(configYaml.Name).List(listOptions)
Expect(err).NotTo(HaveOccurred())
Expect(len(svcs.Items)).To(Equal(configYaml.AutoScaling.Min))

urlScale := fmt.Sprintf("http://%s/scheduler/%s?scaleup=1", app.Address, configYaml.Name)
request, err = http.NewRequest("POST", urlScale, nil)
Expect(err).NotTo(HaveOccurred())
Expand All @@ -504,10 +491,6 @@ var _ = Describe("App", func() {
pods, err = clientset.CoreV1().Pods(configYaml.Name).List(listOptions)
Expect(err).NotTo(HaveOccurred())
Expect(len(pods.Items)).To(Equal(configYaml.AutoScaling.Min + 1))

svcs, err = clientset.CoreV1().Services(configYaml.Name).List(listOptions)
Expect(err).NotTo(HaveOccurred())
Expect(len(svcs.Items)).To(Equal(configYaml.AutoScaling.Min + 1))
})

It("should manually scale down a scheduler", func() {
Expand All @@ -528,10 +511,6 @@ var _ = Describe("App", func() {
Expect(err).NotTo(HaveOccurred())
Expect(len(pods.Items)).To(Equal(configYaml.AutoScaling.Min))

svcs, err := clientset.CoreV1().Services(configYaml.Name).List(listOptions)
Expect(err).NotTo(HaveOccurred())
Expect(len(svcs.Items)).To(Equal(configYaml.AutoScaling.Min))

tx := app.RedisClient.TxPipeline()
tx.SAdd(models.GetRoomStatusSetRedisKey(configYaml.Name, models.StatusReady), pods.Items[0].GetName())
tx.Exec()
Expand All @@ -549,10 +528,6 @@ var _ = Describe("App", func() {
pods, err = clientset.CoreV1().Pods(configYaml.Name).List(listOptions)
Expect(err).NotTo(HaveOccurred())
Expect(len(pods.Items)).To(Equal(configYaml.AutoScaling.Min - 1))

svcs, err = clientset.CoreV1().Services(configYaml.Name).List(listOptions)
Expect(err).NotTo(HaveOccurred())
Expect(len(svcs.Items)).To(Equal(configYaml.AutoScaling.Min - 1))
})
})
})
36 changes: 32 additions & 4 deletions api/room_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"k8s.io/client-go/kubernetes"

"github.com/go-redis/redis"
goredis "github.com/go-redis/redis"
"github.com/golang/mock/gomock"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
Expand Down Expand Up @@ -301,7 +302,7 @@ var _ = Describe("Room Handler", func() {
return models.NewNamespace(name).Create(clientset)
}
createPod := func(name, namespace string, clientset kubernetes.Interface) error {
_, err := models.NewPod(
pod, err := models.NewPod(
"game",
"img",
name,
Expand All @@ -317,13 +318,24 @@ var _ = Describe("Room Handler", func() {
}},
nil,
nil,
).Create(clientset)
mockClientset,
mockRedisClient,
)
if err != nil {
return err
}
_, err = pod.Create(clientset)
return err
}

var app *api.App
game := "somegame"
BeforeEach(func() {
mockRedisClient.EXPECT().TxPipeline().Return(mockPipeline)
mockPipeline.EXPECT().SPop(models.FreePortsRedisKey()).
Return(goredis.NewStringResult("5000", nil))
mockPipeline.EXPECT().Exec()

createNamespace(namespace, clientset)
err := createPod(roomName, namespace, clientset)
Expect(err).NotTo(HaveOccurred())
Expand Down Expand Up @@ -473,7 +485,12 @@ var _ = Describe("Room Handler", func() {
err := ns.Create(clientset)
Expect(err).NotTo(HaveOccurred())

pod := models.NewPod(
mockRedisClient.EXPECT().TxPipeline().Return(mockPipeline)
mockPipeline.EXPECT().SPop(models.FreePortsRedisKey()).
Return(goredis.NewStringResult("5000", nil))
mockPipeline.EXPECT().Exec()

pod, err := models.NewPod(
game,
image,
name,
Expand All @@ -484,7 +501,10 @@ var _ = Describe("Room Handler", func() {
ports,
nil,
nil,
mockClientset,
mockRedisClient,
)
Expect(err).NotTo(HaveOccurred())
_, err = pod.Create(clientset)
Expect(err).NotTo(HaveOccurred())

Expand All @@ -511,7 +531,12 @@ var _ = Describe("Room Handler", func() {
err := ns.Create(clientset)
Expect(err).NotTo(HaveOccurred())

pod := models.NewPod(
mockRedisClient.EXPECT().TxPipeline().Return(mockPipeline)
mockPipeline.EXPECT().SPop(models.FreePortsRedisKey()).
Return(goredis.NewStringResult("5000", nil))
mockPipeline.EXPECT().Exec()

pod, err := models.NewPod(
game,
image,
name,
Expand All @@ -522,7 +547,10 @@ var _ = Describe("Room Handler", func() {
ports,
nil,
nil,
mockClientset,
mockRedisClient,
)
Expect(err).NotTo(HaveOccurred())
_, err = pod.Create(clientset)
Expect(err).NotTo(HaveOccurred())

Expand Down
2 changes: 1 addition & 1 deletion api/scheduler_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func (g *SchedulerDeleteHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques

timeoutSec := g.App.Config.GetInt("deleteTimeoutSeconds")
err := mr.WithSegment(models.SegmentController, func() error {
return controller.DeleteScheduler(l, mr, g.App.DB, g.App.KubernetesClient, params.SchedulerName, timeoutSec)
return controller.DeleteScheduler(l, mr, g.App.DB, g.App.RedisClient, g.App.KubernetesClient, params.SchedulerName, timeoutSec)
})

if err != nil {
Expand Down
Loading

0 comments on commit d4b715e

Please sign in to comment.