diff options
author | specter25 <ujjwalcoding012@gmail.com> | 2021-06-12 18:25:16 +0530 |
---|---|---|
committer | specter25 <ujjwalcoding012@gmail.com> | 2021-06-12 18:25:16 +0530 |
commit | 783b242ebba84bfc42bcd926dd17ef16992f3413 (patch) | |
tree | 950fc8215bc43a88c90406ba2b887e5090c5750b | |
parent | 0a0e69fc25d9b22b756fcd3c26725d85935b8697 (diff) | |
download | spdx-tools-783b242ebba84bfc42bcd926dd17ef16992f3413.tar.gz |
Parse relationships from jsonspec to spdx struct and write tests
- parsed relationships from json to spdx struct
- write testing files for the code
Signed-off-by: specter25 <ujjwalcoding012@gmail.com>
-rw-r--r-- | jsonloader2v2/jsonloader.go | 10 | ||||
-rw-r--r-- | jsonloader2v2/parse_reationship.go | 44 | ||||
-rw-r--r-- | jsonloader2v2/parse_reationship_test.go | 134 |
3 files changed, 183 insertions, 5 deletions
diff --git a/jsonloader2v2/jsonloader.go b/jsonloader2v2/jsonloader.go index 7a03037..a775eab 100644 --- a/jsonloader2v2/jsonloader.go +++ b/jsonloader2v2/jsonloader.go @@ -53,11 +53,11 @@ func (spec JSONSpdxDocument) newDocument(doc *spdxDocument2_2) error { // if err != nil { // return err // } - // case "relationships": - // err := spec.parseJsonRelationships2_2(key, val, doc) - // if err != nil { - // return err - // } + case "relationships": + err := spec.parseJsonRelationships2_2(key, val, doc) + if err != nil { + return err + } default: return fmt.Errorf("unrecognized key here %v", key) diff --git a/jsonloader2v2/parse_reationship.go b/jsonloader2v2/parse_reationship.go new file mode 100644 index 0000000..64b1b12 --- /dev/null +++ b/jsonloader2v2/parse_reationship.go @@ -0,0 +1,44 @@ +package jsonloader2v2 + +import ( + "fmt" + "reflect" + + "github.com/spdx/tools-golang/spdx" +) + +func (spec JSONSpdxDocument) parseJsonRelationships2_2(key string, value interface{}, doc *spdxDocument2_2) error { + + //FIXME : NOASSERTION and NONE in relationship B value not compatible + if reflect.TypeOf(value).Kind() == reflect.Slice { + relationships := reflect.ValueOf(value) + for i := 0; i < relationships.Len(); i++ { + relationship := relationships.Index(i).Interface().(map[string]interface{}) + rel := spdx.Relationship2_2{} + aid, err := extractDocElementID(relationship["spdxElementId"].(string)) + if err != nil { + return fmt.Errorf("%s", err) + } + rel.RefA = aid + + bid, err := extractDocElementID(relationship["relatedSpdxElement"].(string)) + if err != nil { + return fmt.Errorf("%s", err) + } + rel.RefB = bid + + if relationship["relationshipType"] == nil { + return fmt.Errorf("%s , %d", "RelationshipType propty missing in relationship number", i) + } + rel.Relationship = relationship["relationshipType"].(string) + + if relationship["comment"] != nil { + rel.RelationshipComment = relationship["comment"].(string) + } + + doc.Relationships = append(doc.Relationships, &rel) + } + + } + return nil +} diff --git a/jsonloader2v2/parse_reationship_test.go b/jsonloader2v2/parse_reationship_test.go new file mode 100644 index 0000000..57ea266 --- /dev/null +++ b/jsonloader2v2/parse_reationship_test.go @@ -0,0 +1,134 @@ +package jsonloader2v2 + +import ( + "encoding/json" + "reflect" + "testing" + + "github.com/spdx/tools-golang/spdx" +) + +func TestJSONSpdxDocument_parseJsonRelationships2_2(t *testing.T) { + data := []byte(`{ + "relationships" : [ { + "spdxElementId" : "SPDXRef-DOCUMENT", + "relatedSpdxElement" : "DocumentRef-spdx-tool-1.2:SPDXRef-ToolsElement", + "relationshipType" : "COPY_OF" + }, { + "spdxElementId" : "SPDXRef-DOCUMENT", + "relatedSpdxElement" : "SPDXRef-Package", + "relationshipType" : "CONTAINS" + }, { + "spdxElementId" : "SPDXRef-DOCUMENT", + "relatedSpdxElement" : "SPDXRef-File", + "relationshipType" : "DESCRIBES" + }, { + "spdxElementId" : "SPDXRef-DOCUMENT", + "relatedSpdxElement" : "SPDXRef-Package", + "relationshipType" : "DESCRIBES" + }, { + "spdxElementId" : "SPDXRef-Package", + "relatedSpdxElement" : "SPDXRef-Saxon", + "relationshipType" : "DYNAMIC_LINK" + }, { + "spdxElementId" : "SPDXRef-Package", + "relatedSpdxElement" : "SPDXRef-JenaLib", + "relationshipType" : "CONTAINS" + }, { + "spdxElementId" : "SPDXRef-JenaLib", + "relatedSpdxElement" : "SPDXRef-Package", + "relationshipType" : "CONTAINS" + }, { + "spdxElementId" : "SPDXRef-File", + "relatedSpdxElement" : "SPDXRef-fromDoap-0", + "relationshipType" : "GENERATED_FROM" + } ] + } + `) + + Relationship := []*spdx.Relationship2_2{ + { + RefA: spdx.DocElementID{DocumentRefID: "", ElementRefID: "DOCUMENT"}, + RefB: spdx.DocElementID{DocumentRefID: "spdx-tool-1.2", ElementRefID: "ToolsElement"}, + Relationship: "COPY_OF", + }, + { + RefA: spdx.DocElementID{DocumentRefID: "", ElementRefID: "DOCUMENT"}, + RefB: spdx.DocElementID{DocumentRefID: "", ElementRefID: "Package"}, + Relationship: "CONTAINS", + }, + { + RefA: spdx.DocElementID{DocumentRefID: "", ElementRefID: "DOCUMENT"}, + RefB: spdx.DocElementID{DocumentRefID: "", ElementRefID: "File"}, + Relationship: "DESCRIBES", + }, + { + RefA: spdx.DocElementID{DocumentRefID: "", ElementRefID: "DOCUMENT"}, + RefB: spdx.DocElementID{DocumentRefID: "", ElementRefID: "Package"}, + Relationship: "DESCRIBES", + }, + { + RefA: spdx.DocElementID{DocumentRefID: "", ElementRefID: "Package"}, + RefB: spdx.DocElementID{DocumentRefID: "", ElementRefID: "Saxon"}, + Relationship: "DYNAMIC_LINK", + }, + { + RefA: spdx.DocElementID{DocumentRefID: "", ElementRefID: "Package"}, + RefB: spdx.DocElementID{DocumentRefID: "", ElementRefID: "JenaLib"}, + Relationship: "CONTAINS", + }, + { + RefA: spdx.DocElementID{DocumentRefID: "", ElementRefID: "JenaLib"}, + RefB: spdx.DocElementID{DocumentRefID: "", ElementRefID: "Package"}, + Relationship: "CONTAINS", + }, + { + RefA: spdx.DocElementID{DocumentRefID: "", ElementRefID: "File"}, + RefB: spdx.DocElementID{DocumentRefID: "", ElementRefID: "fromDoap-0"}, + Relationship: "GENERATED_FROM", + }, + } + + var specs JSONSpdxDocument + json.Unmarshal(data, &specs) + + type args struct { + key string + value interface{} + doc *spdxDocument2_2 + } + tests := []struct { + name string + spec JSONSpdxDocument + args args + want []*spdx.Relationship2_2 + wantErr bool + }{ + // TODO: Add test cases. + { + name: "successTest", + spec: specs, + args: args{ + key: "relationships", + value: specs["relationships"], + doc: &spdxDocument2_2{}, + }, + want: Relationship, + wantErr: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := tt.spec.parseJsonRelationships2_2(tt.args.key, tt.args.value, tt.args.doc); (err != nil) != tt.wantErr { + t.Errorf("JSONSpdxDocument.parseJsonRelationships2_2() error = %v, wantErr %v", err, tt.wantErr) + } + + for i := 0; i < len(tt.want); i++ { + if !reflect.DeepEqual(tt.args.doc.Relationships[i], tt.want[i]) { + t.Errorf("Load2_2() = %v, want %v", tt.args.doc.Relationships[i], tt.want[i]) + } + } + + }) + } +} |