Skip to content

Commit 713f468

Browse files
committed
Merge pull request #138 from kmala/server
feat(swagger):handle the requests using swagger stubs
2 parents 5c94583 + bcece24 commit 713f468

34 files changed

+700
-1132
lines changed

Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ build:
4747

4848
swagger-serverstub:
4949
${SWAGGER_CMD} generate server -A WorkflowManager -t pkg/swagger -f https://raw.githubusercontent.com/deis/workflow-manager/master/api/swagger-spec/swagger.yml
50+
mv pkg/swagger/cmd/workflow-manager-server/main.go .
5051

5152
test:
5253
${DEV_ENV_CMD} sh -c 'go test -tags testonly $$(glide nv)'

filter_by_age_test.go

-77
This file was deleted.

get_latest_versions_test.go

-85
This file was deleted.
File renamed without changes.

pkg/data/cluster.go

+26-37
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ import (
44
"encoding/json"
55
"errors"
66
"fmt"
7+
"github.com/deis/workflow-manager-api/pkg/swagger/models"
8+
"github.com/jinzhu/gorm"
79
"log"
810
"time"
9-
10-
"github.com/deis/workflow-manager/types"
11-
"github.com/jinzhu/gorm"
1211
)
1312

1413
var (
@@ -23,93 +22,83 @@ func (e errParsingCluster) Error() string {
2322
return fmt.Sprintf("Error parsing cluster (%s)", e.origErr)
2423
}
2524

26-
// ClusterStateful definition
27-
// This is a wrapper around a cluster object to include properties for use in stateful contexts
28-
type ClusterStateful struct {
29-
// FirstSeen and/or LastSeen suggests a Cluster object in a lifecycle context,
30-
// i.e., for use in business logic which needs to determine a cluster's "freshness" or "staleness"
31-
FirstSeen time.Time `json:"firstSeen"`
32-
LastSeen time.Time `json:"lastSeen"`
33-
types.Cluster
34-
}
35-
3625
// GetCluster gets the cluster from the DB with the given cluster ID
37-
func GetCluster(db *gorm.DB, id string) (ClusterStateful, error) {
26+
func GetCluster(db *gorm.DB, id string) (models.Cluster, error) {
3827
ret := &clustersTable{}
3928
resDB := db.Where(&clustersTable{ClusterID: id}).First(ret)
4029
if resDB.Error != nil {
41-
return ClusterStateful{}, resDB.Error
30+
return models.Cluster{}, resDB.Error
4231
}
43-
cluster, err := parseJSONCluster(ret.Data)
32+
cluster, err := parseJSONCluster([]byte(ret.Data))
4433
if err != nil {
45-
return ClusterStateful{}, errParsingCluster{origErr: err}
34+
return models.Cluster{}, errParsingCluster{origErr: err}
4635
}
4736
return cluster, nil
4837
}
4938

50-
func upsertCluster(db *gorm.DB, id string, cluster ClusterStateful) (ClusterStateful, error) {
39+
func upsertCluster(db *gorm.DB, id string, cluster models.Cluster) (models.Cluster, error) {
5140
// Check in
5241
if err := CheckInCluster(db, id, time.Now(), cluster); err != nil {
53-
return ClusterStateful{}, err
42+
return models.Cluster{}, err
5443
}
5544
js, err := json.Marshal(cluster)
5645
if err != nil {
57-
return ClusterStateful{}, err
46+
return models.Cluster{}, err
5847
}
5948
var numExisting int
6049
query := clustersTable{ClusterID: id}
6150
countDB := db.Model(&clustersTable{}).Where(&query).Count(&numExisting)
6251
if countDB.Error != nil {
63-
return ClusterStateful{}, countDB.Error
52+
return models.Cluster{}, countDB.Error
6453
}
6554
var resDB *gorm.DB
6655
if numExisting == 0 {
6756
// no existing clusters, so create one
68-
createDB := db.Create(&clustersTable{ClusterID: id, Data: js})
57+
createDB := db.Create(&clustersTable{ClusterID: id, Data: string(js)})
6958
if createDB.Error != nil {
70-
return ClusterStateful{}, createDB.Error
59+
return models.Cluster{}, createDB.Error
7160
}
7261
resDB = createDB
7362
} else {
74-
updateDB := db.Save(&clustersTable{ClusterID: id, Data: js})
63+
updateDB := db.Save(&clustersTable{ClusterID: id, Data: string(js)})
7564
if updateDB.Error != nil {
76-
return ClusterStateful{}, updateDB.Error
65+
return models.Cluster{}, updateDB.Error
7766
}
7867
resDB = updateDB
7968
}
8069
if resDB.RowsAffected != 1 {
81-
return ClusterStateful{}, fmt.Errorf("%d rows were affected, but expected only 1", resDB.RowsAffected)
70+
return models.Cluster{}, fmt.Errorf("%d rows were affected, but expected only 1", resDB.RowsAffected)
8271
}
8372
retCluster, err := GetCluster(db, id)
8473
if err != nil {
85-
return ClusterStateful{}, err
74+
return models.Cluster{}, err
8675
}
8776
return retCluster, nil
8877
}
8978

9079
// UpsertCluster creates or updates the cluster with the given ID.
91-
func UpsertCluster(db *gorm.DB, id string, cluster ClusterStateful) (ClusterStateful, error) {
80+
func UpsertCluster(db *gorm.DB, id string, cluster models.Cluster) (models.Cluster, error) {
9281
txn := db.Begin()
9382
if txn.Error != nil {
94-
return ClusterStateful{}, txErr{orig: nil, err: txn.Error, op: "begin"}
83+
return models.Cluster{}, txErr{orig: nil, err: txn.Error, op: "begin"}
9584
}
9685
ret, err := upsertCluster(txn, id, cluster)
9786
if err != nil {
9887
rbDB := txn.Rollback()
9988
if rbDB.Error != nil {
100-
return ClusterStateful{}, txErr{orig: err, err: rbDB.Error, op: "rollback"}
89+
return models.Cluster{}, txErr{orig: err, err: rbDB.Error, op: "rollback"}
10190
}
102-
return ClusterStateful{}, err
91+
return models.Cluster{}, err
10392
}
10493
comDB := txn.Commit()
10594
if comDB.Error != nil {
106-
return ClusterStateful{}, txErr{orig: nil, err: comDB.Error, op: "commit"}
95+
return models.Cluster{}, txErr{orig: nil, err: comDB.Error, op: "commit"}
10796
}
10897
return ret, nil
10998
}
11099

111100
// CheckInCluster creates a new record in the cluster checkins DB to indicate that the cluster has checked in right now
112-
func CheckInCluster(db *gorm.DB, id string, checkinTime time.Time, cluster ClusterStateful) error {
101+
func CheckInCluster(db *gorm.DB, id string, checkinTime time.Time, cluster models.Cluster) error {
113102
js, err := json.Marshal(cluster)
114103
if err != nil {
115104
fmt.Println("error marshaling data")
@@ -128,7 +117,7 @@ func CheckInCluster(db *gorm.DB, id string, checkinTime time.Time, cluster Clust
128117

129118
// FilterClustersByAge returns a slice of clusters whose various time fields match the requirements
130119
// in the given filter. Note that the filter's requirements are a conjunction, not a disjunction
131-
func FilterClustersByAge(db *gorm.DB, filter *ClusterAgeFilter) ([]ClusterStateful, error) {
120+
func FilterClustersByAge(db *gorm.DB, filter *ClusterAgeFilter) ([]*models.Cluster, error) {
132121
var rows []clustersTable
133122
execDB := db.Raw(`SELECT clusters.*
134123
FROM clusters, clusters_checkins
@@ -147,13 +136,13 @@ func FilterClustersByAge(db *gorm.DB, filter *ClusterAgeFilter) ([]ClusterStatef
147136
return nil, execDB.Error
148137
}
149138

150-
clusters := make([]ClusterStateful, len(rows))
139+
clusters := make([]*models.Cluster, len(rows))
151140
for i, row := range rows {
152-
cluster, err := parseJSONCluster(row.Data)
141+
cluster, err := parseJSONCluster([]byte(row.Data))
153142
if err != nil {
154143
return nil, err
155144
}
156-
clusters[i] = cluster
145+
clusters[i] = &cluster
157146
}
158147
return clusters, nil
159148
}

pkg/data/cluster_count_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ func TestGetClusterCount(t *testing.T) {
1212
count, err := GetClusterCount(db)
1313
assert.NoErr(t, err)
1414
assert.Equal(t, count, 0, "count")
15-
d1 := db.Create(&clustersTable{ClusterID: uuid.New(), Data: []byte("{}")})
15+
d1 := db.Create(&clustersTable{ClusterID: uuid.New(), Data: "{}"})
1616
assert.NoErr(t, d1.Error)
1717
count, err = GetClusterCount(d1)
1818
assert.NoErr(t, err)

pkg/data/cluster_filter_by_age_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ func createAndCheckinClusters(db *gorm.DB, totalNumClusters, filterNum int, fca
130130
if marshalErr != nil {
131131
return fmt.Errorf("error JSON serializing cluster %d for filter %d (%s)", clusterNum, filterNum, marshalErr)
132132
}
133-
createDB := db.Model(&clustersTable{}).Create(&clustersTable{ClusterID: cluster.ID, Data: clusterJSON})
133+
createDB := db.Model(&clustersTable{}).Create(&clustersTable{ClusterID: cluster.ID, Data: string(clusterJSON)})
134134
if createDB.Error != nil {
135135
return fmt.Errorf("error creating cluster %s for filter %d in DB (%s)", cluster.ID, filterNum, createDB.Error)
136136
}

pkg/data/cluster_test.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"time"
88

99
"github.com/arschles/assert"
10-
"github.com/deis/workflow-manager/types"
10+
"github.com/deis/workflow-manager-api/pkg/swagger/models"
1111
"github.com/jinzhu/gorm"
1212
)
1313

@@ -35,10 +35,10 @@ func newDB() (*gorm.DB, error) {
3535
return db, nil
3636
}
3737

38-
func testCluster() ClusterStateful {
39-
cluster := ClusterStateful{}
38+
func testCluster() models.Cluster {
39+
cluster := models.Cluster{}
4040
cluster.ID = clusterID
41-
cluster.Components = []types.ComponentVersion{testComponentVersion()}
41+
cluster.Components = []*models.ComponentVersion{testComponentVersion()}
4242
return cluster
4343
}
4444

@@ -47,15 +47,16 @@ func TestClusterRoundTrip(t *testing.T) {
4747
assert.NoErr(t, err)
4848
cluster, err := GetCluster(sqliteDB, clusterID)
4949
assert.True(t, err != nil, "error not returned when expected")
50-
assert.Equal(t, cluster, ClusterStateful{}, "returned cluster")
50+
assert.Equal(t, cluster, models.Cluster{}, "returned cluster")
5151
expectedCluster := testCluster()
5252
// the first time we invoke .CheckInAndSetCluster() it will create a new record
5353
newCluster, err := UpsertCluster(sqliteDB, clusterID, expectedCluster)
5454
assert.NoErr(t, err)
5555
assert.Equal(t, newCluster.ID, expectedCluster.ID, "cluster ID property")
5656
assert.Equal(t, newCluster.Components[0].Component.Description, expectedCluster.Components[0].Component.Description, "cluster component description property")
5757
// modify the cluster object
58-
expectedCluster.Components[0].Component.Description = "new description"
58+
desc := "new description"
59+
expectedCluster.Components[0].Component.Description = &desc
5960
// the next time we invoke .CheckInAndSetCluster() it should update the existing record we just created
6061
updatedCluster, err := UpsertCluster(sqliteDB, clusterID, expectedCluster)
6162
assert.NoErr(t, err)

0 commit comments

Comments
 (0)