feat: add revision number to proxy and layers to identify changes
All checks were successful
Cadoles/bouncer/pipeline/head This commit looks good
All checks were successful
Cadoles/bouncer/pipeline/head This commit looks good
This commit is contained in:
@ -3,6 +3,7 @@ package testsuite
|
||||
import (
|
||||
"context"
|
||||
"reflect"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"forge.cadoles.com/cadoles/bouncer/internal/store"
|
||||
@ -49,6 +50,10 @@ var layerRepositoryTestCases = []layerRepositoryTestCase{
|
||||
return errors.Errorf("layer.UpdatedAt should not be zero value")
|
||||
}
|
||||
|
||||
if layer.Revision != 0 {
|
||||
return errors.Errorf("layer.Revision should be zero")
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
@ -230,6 +235,86 @@ var layerRepositoryTestCases = []layerRepositoryTestCase{
|
||||
return errors.New("could not find created layer in query results")
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Create then update layer",
|
||||
Do: func(repo store.LayerRepository) error {
|
||||
ctx := context.Background()
|
||||
|
||||
var layerName store.LayerName = "create_then_update_layer"
|
||||
var proxyName store.ProxyName = store.ProxyName(string(layerName) + "_proxy")
|
||||
var layerType store.LayerType = "dummy"
|
||||
var layerOptions store.LayerOptions = store.LayerOptions{}
|
||||
|
||||
createdLayer, err := repo.CreateLayer(ctx, proxyName, layerName, layerType, layerOptions)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
if e, g := 0, createdLayer.Revision; e != g {
|
||||
return errors.Errorf("createdLayer.Revision: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
updatedLayer, err := repo.UpdateLayer(ctx, proxyName, layerName)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "err should be nil")
|
||||
}
|
||||
|
||||
if e, g := 1, updatedLayer.Revision; e != g {
|
||||
return errors.Errorf("updatedLayer.Revision: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Update layer concurrently",
|
||||
Do: func(repo store.LayerRepository) error {
|
||||
ctx := context.Background()
|
||||
|
||||
var layerName store.LayerName = "update_layer_concurrently"
|
||||
var proxyName store.ProxyName = store.ProxyName(string(layerName) + "_proxy")
|
||||
var layerType store.LayerType = "dummy"
|
||||
var layerOptions store.LayerOptions = store.LayerOptions{}
|
||||
|
||||
createdLayer, err := repo.CreateLayer(ctx, proxyName, layerName, layerType, layerOptions)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
if createdLayer.Revision != 0 {
|
||||
return errors.Errorf("createdLayer.Revision should be zero")
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
|
||||
total := 100
|
||||
|
||||
wg.Add(total)
|
||||
|
||||
for i := 0; i < total; i++ {
|
||||
go func(i int) {
|
||||
defer wg.Done()
|
||||
|
||||
if _, err := repo.UpdateLayer(ctx, createdLayer.Proxy, createdLayer.Name); err != nil {
|
||||
panic(errors.Wrap(err, "err should be nil"))
|
||||
}
|
||||
}(i)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
|
||||
layer, err := repo.GetLayer(ctx, createdLayer.Proxy, createdLayer.Name)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "err should be nil")
|
||||
}
|
||||
|
||||
if e, g := total, layer.Revision; e != g {
|
||||
return errors.Errorf("layer.Revision: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
|
@ -3,6 +3,7 @@ package testsuite
|
||||
import (
|
||||
"context"
|
||||
"reflect"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"forge.cadoles.com/cadoles/bouncer/internal/store"
|
||||
@ -51,6 +52,10 @@ var proxyRepositoryTestCases = []proxyRepositoryTestCase{
|
||||
return errors.Errorf("proxy.UpdatedAt should not be zero value")
|
||||
}
|
||||
|
||||
if proxy.Revision != 0 {
|
||||
return errors.Errorf("proxy.Revision should be zero")
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
@ -99,6 +104,10 @@ var proxyRepositoryTestCases = []proxyRepositoryTestCase{
|
||||
return errors.Errorf("foundProxy.UpdatedAt: expected '%v', got '%v'", createdProxy.UpdatedAt, foundProxy.UpdatedAt)
|
||||
}
|
||||
|
||||
if foundProxy.Revision != 0 {
|
||||
return errors.Errorf("foundProxy.Revision should be zero")
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
@ -194,6 +203,84 @@ var proxyRepositoryTestCases = []proxyRepositoryTestCase{
|
||||
return errors.Errorf("err: expected store.ErrAlreadyExists, got '%+v'", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Create then update proxy",
|
||||
Do: func(repo store.ProxyRepository) error {
|
||||
ctx := context.Background()
|
||||
|
||||
to := "http://example.com"
|
||||
|
||||
var name store.ProxyName = "create_then_update_proxy"
|
||||
|
||||
createdProxy, err := repo.CreateProxy(ctx, name, to, "127.0.0.1:*", "localhost:*")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "err should be nil")
|
||||
}
|
||||
|
||||
if createdProxy.Revision != 0 {
|
||||
return errors.Errorf("createdProxy.Revision should be zero")
|
||||
}
|
||||
|
||||
updatedProxy, err := repo.UpdateProxy(ctx, name)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "err should be nil")
|
||||
}
|
||||
|
||||
if e, g := 1, updatedProxy.Revision; e != g {
|
||||
return errors.Errorf("updatedProxy.Revision: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Update proxy concurrently",
|
||||
Do: func(repo store.ProxyRepository) error {
|
||||
ctx := context.Background()
|
||||
|
||||
to := "http://example.com"
|
||||
|
||||
var name store.ProxyName = "update_proxy_concurrently"
|
||||
|
||||
createdProxy, err := repo.CreateProxy(ctx, name, to, "127.0.0.1:*", "localhost:*")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "err should be nil")
|
||||
}
|
||||
|
||||
if createdProxy.Revision != 0 {
|
||||
return errors.Errorf("createdProxy.Revision should be zero")
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
|
||||
total := 100
|
||||
|
||||
wg.Add(total)
|
||||
|
||||
for i := 0; i < total; i++ {
|
||||
go func(i int) {
|
||||
defer wg.Done()
|
||||
|
||||
if _, err := repo.UpdateProxy(ctx, name); err != nil {
|
||||
panic(errors.Wrap(err, "err should be nil"))
|
||||
}
|
||||
}(i)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
|
||||
proxy, err := repo.GetProxy(ctx, name)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "err should be nil")
|
||||
}
|
||||
|
||||
if e, g := total, proxy.Revision; e != g {
|
||||
return errors.Errorf("proxy.Revision: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
|
Reference in New Issue
Block a user