osbuild2: add org.osbuild.inline source
Add support for the `org.osbuild.inline` source via a new `InlineSource` and the corresponding `InlineSourceItem`. A utility function `AddItem` can be used to conveniently add items based on data (as strings).
This commit is contained in:
parent
efbef95bf1
commit
6d383ec89a
3 changed files with 75 additions and 0 deletions
41
internal/osbuild2/inline_source.go
Normal file
41
internal/osbuild2/inline_source.go
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
package osbuild2
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type InlineSource struct {
|
||||
Items map[string]InlineSourceItem `json:"items"`
|
||||
}
|
||||
|
||||
func (InlineSource) isSource() {}
|
||||
|
||||
type InlineSourceItem struct {
|
||||
Encoding string `json:"encoding"`
|
||||
Data string `json:"data"`
|
||||
}
|
||||
|
||||
func NewInlineSource() *InlineSource {
|
||||
return &InlineSource{
|
||||
Items: make(map[string]InlineSourceItem),
|
||||
}
|
||||
}
|
||||
|
||||
// AddItem a new item to the source. Well hash and encode that data
|
||||
// and return the checksum.
|
||||
func (s *InlineSource) AddItem(data string) string {
|
||||
|
||||
dataBytes := []byte(data)
|
||||
|
||||
encoded := base64.StdEncoding.EncodeToString(dataBytes)
|
||||
name := fmt.Sprintf("sha256:%x", sha256.Sum256(dataBytes))
|
||||
|
||||
s.Items[name] = InlineSourceItem{
|
||||
Encoding: "base64",
|
||||
Data: encoded,
|
||||
}
|
||||
|
||||
return name
|
||||
}
|
||||
32
internal/osbuild2/inline_source_test.go
Normal file
32
internal/osbuild2/inline_source_test.go
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
package osbuild2
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestInlineSource(t *testing.T) {
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
tests := []struct {
|
||||
data string
|
||||
hash string
|
||||
encoded string
|
||||
}{
|
||||
{"42\n", "sha256:084c799cd551dd1d8d5c5f9a5d593b2e931f5e36122ee5c793c1d08a19839cc0", "NDIK"},
|
||||
{"Hallo Welt\n", "sha256:f950375066d74787f31cbd8f9f91c71819357cad243fb9d4a0d9ef4fa76709e0", "SGFsbG8gV2VsdAo="},
|
||||
}
|
||||
|
||||
ils := NewInlineSource()
|
||||
|
||||
for _, tt := range tests {
|
||||
hash := ils.AddItem(tt.data)
|
||||
assert.Equal(tt.hash, hash)
|
||||
|
||||
item := ils.Items[hash]
|
||||
assert.Equal(item.Data, tt.encoded)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -33,6 +33,8 @@ func (sources *Sources) UnmarshalJSON(data []byte) error {
|
|||
switch name {
|
||||
case "org.osbuild.curl":
|
||||
source = new(CurlSource)
|
||||
case "org.osbuild.inline":
|
||||
source = new(InlineSource)
|
||||
case "org.osbuild.ostree":
|
||||
source = new(OSTreeSource)
|
||||
default:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue