Reactivate tests and write additional ones for protocol
Go / lint (push) Failing after 12s Details
Go / build (push) Failing after 10s Details

Move two functions into globals as they are benefitial in other tests
aswell and probably later in the implementation too.
This commit is contained in:
Marcel M. Otte 2023-11-10 12:54:43 +01:00
parent e318067d90
commit 680d64fc21
5 changed files with 122 additions and 64 deletions

View File

@ -6,8 +6,6 @@ import (
"os"
"os/user"
"path"
"runtime"
"strings"
"testing"
"gitea.mmo.to/ppForge/ppforge/cop"
@ -15,29 +13,10 @@ import (
"gitea.mmo.to/ppForge/ppforge/protocol"
)
func getCurrentDir() string {
_, filename, _, _ := runtime.Caller(0)
return path.Dir(filename)
}
func getRepoDir(start string) (string, error) {
var repoPath string
entries, err := os.ReadDir(start)
for _, v := range entries {
if strings.HasSuffix(v.Name(), ".git") {
repoPath = start
}
}
if repoPath == "" {
return getRepoDir(path.Dir(start))
}
return repoPath, err
}
func setupSuite(t *testing.T) func(t *testing.T) {
// setup
// setup testing home dir
repo, err := getRepoDir(getCurrentDir())
repo, err := globals.GetRepoDir(globals.GetCurrentDir())
if err != nil {
t.Error(err)
}
@ -63,7 +42,7 @@ func TestOpen(t *testing.T) {
defer td(t)
fcop := cop.FileCOP{}
wd, err := getRepoDir(getCurrentDir())
wd, err := globals.GetRepoDir(globals.GetCurrentDir())
if err != nil {
fmt.Printf("Os error: %s", err)
t.Fail()
@ -83,7 +62,7 @@ func TestClosed(t *testing.T) {
defer td(t)
fcop := cop.FileCOP{}
wd, err := getRepoDir(getCurrentDir())
wd, err := globals.GetRepoDir(globals.GetCurrentDir())
if err != nil {
fmt.Printf("Os error: %s", err)
t.Fail()
@ -118,7 +97,7 @@ func TestGlobalCOP(t *testing.T) {
fmt.Println("Length != 1")
t.Fail()
}
wd, _ := getRepoDir(getCurrentDir())
wd, err := globals.GetRepoDir(globals.GetCurrentDir())
fcop, err := cop.NewFileCOP(path.Join(wd, "test", "cop"))
if err != nil {
fmt.Println("Error on loading new FileCOP", err)

View File

@ -1,8 +1,12 @@
package cop
/*
The COP struct is the base for all collections of protocols, it does not implement the COPer interface itself, because it shouldn't be instantiated at all, only in it's specializations.
*/
import "gitea.mmo.to/ppForge/ppforge/protocol"
// COP represents a Collection of Protocols
// COP represents the base for Collection of Protocols
type COP struct {
Type string
Protocols map[string]ProtocolCollectionEntry
@ -14,3 +18,6 @@ type ProtocolCollectionEntry struct {
Path string
Protocol protocol.ProtocolMeta
}
// A collection entry has a path, which is meant to be a filesystem path, but doesn't necessarily have to be.
// If a collection is implemented as a database, this could also be the unique id. It is there to uniquely identify the entry.

View File

@ -1,6 +1,13 @@
package globals
import "os/user"
import (
"errors"
"os"
"os/user"
"path"
"runtime"
"strings"
)
// Global variables, Mocks, etc.
// This package shall not have any dependency towards the application itself!
@ -31,3 +38,29 @@ type Marshaler interface {
fromJSON() error
}
*/
// GetCurrentDir returns the current directory of the called function
func GetCurrentDir() string {
_, filename, _, _ := runtime.Caller(0)
return path.Dir(filename)
}
// GetRepoDir tries to find the parent git repository path
func GetRepoDir(start string) (string, error) {
var repoPath string
entries, err := os.ReadDir(start)
for _, v := range entries {
if strings.HasSuffix(v.Name(), ".git") {
repoPath = start
}
}
// linux
if start == "/" {
return "", errors.New("Parent repository dir couldn't be found")
}
// windows, how?
if repoPath == "" {
return GetRepoDir(path.Dir(start))
}
return repoPath, err
}

View File

@ -2,8 +2,8 @@ package protocol
import (
"encoding/json"
"errors"
"fmt"
"io/fs"
"os"
)
@ -37,6 +37,13 @@ func (prot *Protocol) AppendField(field Field) int {
return i + 1
}
// AppendFields to protocol
func (prot *Protocol) AppendFields(fields ...Field) {
for _, e := range fields {
prot.AppendField(e)
}
}
// AddField to protocol
func (prot *Protocol) AddField(index int, field *Field) {
if len(prot.Structure) == index {
@ -69,7 +76,7 @@ func (prot *Protocol) UpdateFieldByElement(element int, field *Field) {
}
// RemoveFieldByName from the protocol
func (prot *Protocol) RemoveFieldByName(name string) {
func (prot *Protocol) RemoveFieldByName(name string) error {
element := -1
for i, f := range prot.Structure {
if f.Name == name {
@ -77,9 +84,10 @@ func (prot *Protocol) RemoveFieldByName(name string) {
}
}
if element == -1 {
return
return errors.New("Element not found")
}
prot.RemoveFieldByElement(element)
return nil
}
// RemoveFieldByElement from the protocol
@ -110,7 +118,7 @@ func (prot *Protocol) Save(path string) error {
if err != nil {
return err
}
err = os.WriteFile(path, data, fs.ModeAppend)
err = os.WriteFile(path, data, 0644)
return err
}

View File

@ -2,7 +2,10 @@ package protocol
import (
"fmt"
"path"
"testing"
"gitea.mmo.to/ppForge/ppforge/globals"
)
func TestUpdateMetaData(t *testing.T) {
@ -57,10 +60,7 @@ func GenerateFields() []Field {
func GenerateStructure() *Protocol {
p := NewProtocolStructure()
slc := GenerateFields()
for i, e := range slc {
p.AppendField(e)
fmt.Printf("%d %s\n", i, e.ToJson())
}
p.AppendFields(slc...)
for i, e := range p.Structure {
fmt.Printf("%d %s\n", i, e.ToJson())
}
@ -86,13 +86,27 @@ func TestFieldAppend(t *testing.T) {
}
}
/*
func TestUpdateFieldByName(t *testing.T) {
func TestFieldAdd(t *testing.T) {
f := NewField(
"testfield",
"Description",
"",
8,
nil,
false,
false,
)
p := NewProtocolStructure()
p.AddField(0, f)
p.AddField(0, f)
}
func TestUpdateFieldByName(t *testing.T) {
p := GenerateStructure()
f := NewField(
"UpdatedField", "", "", 42, nil, false, true,
)
UpdateFieldByName(p, "testfield3", f)
p.UpdateFieldByName("testfield3", f)
for i, e := range p.Structure {
fmt.Printf("%d %s\n", i, e.ToJson())
}
@ -100,8 +114,7 @@ func TestFieldAppend(t *testing.T) {
t.Log("Update field by Ref failed!")
t.Fail()
}
} //
*/
} //
func TestUpdateFieldByElement(t *testing.T) {
p := GenerateStructure()
f := NewField(
@ -117,10 +130,9 @@ func TestUpdateFieldByElement(t *testing.T) {
}
}
/*
func TestRemoveFieldByName(t *testing.T) {
func TestRemoveFieldByName(t *testing.T) {
p := GenerateStructure()
RemoveFieldByName(p, "testfield3")
p.RemoveFieldByName("testfield3")
for i, e := range p.Structure {
fmt.Printf("%d %s\n", i, e.ToJson())
}
@ -128,8 +140,8 @@ func TestUpdateFieldByElement(t *testing.T) {
t.Log("Remove by name failed!")
t.Fail()
}
}//
*/
} //
func TestRemoveFieldByElement(t *testing.T) {
p := GenerateStructure()
p.RemoveFieldByElement(3)
@ -146,3 +158,22 @@ func TestToJson(t *testing.T) {
p := GenerateStructure()
fmt.Print(p.ToJSON())
}
func TestSaveAndLoad(t *testing.T) {
p := GenerateStructure()
wd, err := globals.GetRepoDir(globals.GetCurrentDir())
if err != nil {
t.Fail()
}
path := path.Join(wd, "test", "protocolsavetest.protocoljson")
p.Save(path)
p2 := NewProtocolStructure()
p2.Load(path)
if len(p2.Structure) == 0 {
t.Fail()
}
p3, err := LoadNew(path)
if len(p3.Structure) == 0 {
t.Fail()
}
}