Skip to content

Commit

Permalink
fix load links/aliases after restart
Browse files Browse the repository at this point in the history
  • Loading branch information
reddec committed Jun 26, 2020
1 parent 9e1b638 commit 2789c49
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 1 deletion.
10 changes: 9 additions & 1 deletion application/platform/platform.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,14 @@ func (platform *platform) Add(uid string, lambda application.Lambda) error {
if platform.byUID == nil {
platform.byUID = make(map[string]record)
}
platform.byUID[uid] = record{lambda: lambda, aliases: make(types.JsonStringSet)}
rec := record{lambda: lambda, aliases: make(types.JsonStringSet)}
// search for already existent links
for alias, target := range platform.config.Links {
if target == uid {
rec.aliases.Set(alias)
}
}
platform.byUID[uid] = rec
platform.lock.Unlock()

if !exists {
Expand All @@ -179,6 +186,7 @@ func (platform *platform) Remove(uid string) {
delete(platform.config.Links, alias)
}
}
_ = platform.unsafeSaveConfig()
}

func (platform *platform) Invoke(ctx context.Context, lambda application.Lambda, request types.Request, out io.Writer) error {
Expand Down
72 changes: 72 additions & 0 deletions application/platform/platform_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package platform_test

import (
"github.com/reddec/trusted-cgi/application/lambda"
"github.com/reddec/trusted-cgi/application/platform"
"github.com/stretchr/testify/assert"
"io/ioutil"
"os"
"testing"
)

func TestPlatform_AddWithOldAliases(t *testing.T) {
temp, err := ioutil.TempFile("", "")
if !assert.NoError(t, err) {
return
}
defer os.RemoveAll(temp.Name())
defer temp.Close()

workdir, err := ioutil.TempDir("", "")
if !assert.NoError(t, err) {
return
}
defer os.RemoveAll(workdir)

dummy, err := lambda.DummyPublic(workdir, "/usr/bin/cat", "-")
if !assert.NoError(t, err) {
return
}

_, err = temp.WriteString(`{"links":{"xxx":"123", "yyy": "456", "zzz": "123"}}`)
if !assert.NoError(t, err) {
return
}

plato, err := platform.New(temp.Name())
if !assert.NoError(t, err) {
return
}

assert.Len(t, plato.Config().Links, 3)

err = plato.Add("123", dummy)
if !assert.NoError(t, err) {
return
}

byUID, err := plato.FindByUID("123")
if !assert.NoError(t, err) {
return
}
assert.Equal(t, byUID.Lambda, dummy)

assert.Len(t, byUID.Aliases, 2)
assert.Contains(t, byUID.Aliases, "xxx")
assert.Contains(t, byUID.Aliases, "zzz")

{
byLink, err := plato.FindByLink("xxx")
if !assert.NoError(t, err) {
return
}
assert.Equal(t, byLink, byUID)
}
{
byLink, err := plato.FindByLink("zzz")
if !assert.NoError(t, err) {
return
}
assert.Equal(t, byLink, byUID)
}
}

0 comments on commit 2789c49

Please sign in to comment.