aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorspecter25 <ujjwalcoding012@gmail.com>2021-06-12 18:25:16 +0530
committerspecter25 <ujjwalcoding012@gmail.com>2021-06-12 18:25:16 +0530
commit783b242ebba84bfc42bcd926dd17ef16992f3413 (patch)
tree950fc8215bc43a88c90406ba2b887e5090c5750b
parent0a0e69fc25d9b22b756fcd3c26725d85935b8697 (diff)
downloadspdx-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.go10
-rw-r--r--jsonloader2v2/parse_reationship.go44
-rw-r--r--jsonloader2v2/parse_reationship_test.go134
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])
+ }
+ }
+
+ })
+ }
+}