Release 0.3.0
[govpp.git] / cmd / binapi-generator / generate_test.go
index c1181f0..4bec874 100644 (file)
@@ -15,6 +15,8 @@
 package main
 
 import (
+       "bufio"
+       "io/ioutil"
        "os"
        "testing"
 
@@ -23,9 +25,9 @@ import (
 
 func TestGetInputFiles(t *testing.T) {
        RegisterTestingT(t)
-       result, err := getInputFiles("testdata")
+       result, err := getInputFiles("testdata", 1)
        Expect(err).ShouldNot(HaveOccurred())
-       Expect(result).To(HaveLen(5))
+       Expect(result).To(HaveLen(3))
        for _, file := range result {
                Expect(file).To(BeAnExistingFile())
        }
@@ -33,7 +35,7 @@ func TestGetInputFiles(t *testing.T) {
 
 func TestGetInputFilesError(t *testing.T) {
        RegisterTestingT(t)
-       result, err := getInputFiles("nonexisting_directory")
+       result, err := getInputFiles("nonexisting_directory", 1)
        Expect(err).Should(HaveOccurred())
        Expect(result).To(BeNil())
 }
@@ -43,28 +45,28 @@ func TestGenerateFromFile(t *testing.T) {
        outDir := "test_output_directory"
        // remove directory created during test
        defer os.RemoveAll(outDir)
-       err := generateFromFile("testdata/acl.api.json", outDir)
+       err := generateFromFile("testdata/acl.api.json", outDir, nil)
        Expect(err).ShouldNot(HaveOccurred())
-       fileInfo, err := os.Stat(outDir + "/acl/acl.go")
+       fileInfo, err := os.Stat(outDir + "/acl/acl.ba.go")
        Expect(err).ShouldNot(HaveOccurred())
        Expect(fileInfo.IsDir()).To(BeFalse())
-       Expect(fileInfo.Name()).To(BeEquivalentTo("acl.go"))
+       Expect(fileInfo.Name()).To(BeEquivalentTo("acl.ba.go"))
 }
 
 func TestGenerateFromFileInputError(t *testing.T) {
        RegisterTestingT(t)
        outDir := "test_output_directory"
-       err := generateFromFile("testdata/nonexisting.json", outDir)
+       err := generateFromFile("testdata/nonexisting.json", outDir, nil)
        Expect(err).Should(HaveOccurred())
-       Expect(err.Error()).To(ContainSubstring("reading data from file failed"))
+       Expect(err.Error()).To(ContainSubstring("invalid input file name"))
 }
 
 func TestGenerateFromFileReadJsonError(t *testing.T) {
        RegisterTestingT(t)
        outDir := "test_output_directory"
-       err := generateFromFile("testdata/input-read-json-error.json", outDir)
+       err := generateFromFile("testdata/input-read-json-error.json", outDir, nil)
        Expect(err).Should(HaveOccurred())
-       Expect(err.Error()).To(ContainSubstring("JSON unmarshall failed"))
+       Expect(err.Error()).To(ContainSubstring("invalid input file name"))
 }
 
 func TestGenerateFromFileGeneratePackageError(t *testing.T) {
@@ -77,23 +79,23 @@ func TestGenerateFromFileGeneratePackageError(t *testing.T) {
                }
                os.RemoveAll(outDir)
        }()
-       err := generateFromFile("testdata/input-generate-error.json", outDir)
+       err := generateFromFile("testdata/input-generate-error.json", outDir, nil)
        Expect(err).Should(HaveOccurred())
 }
 
 func TestGetContext(t *testing.T) {
        RegisterTestingT(t)
        outDir := "test_output_directory"
-       result, err := getContext("testdata/af_packet.api.json", outDir)
+       result, err := newContext("testdata/af_packet.api.json", outDir)
        Expect(err).ShouldNot(HaveOccurred())
        Expect(result).ToNot(BeNil())
-       Expect(result.outputFile).To(BeEquivalentTo(outDir + "/af_packet/af_packet.go"))
+       Expect(result.outputFile).To(BeEquivalentTo(outDir + "/af_packet/af_packet.ba.go"))
 }
 
 func TestGetContextNoJsonFile(t *testing.T) {
        RegisterTestingT(t)
        outDir := "test_output_directory"
-       result, err := getContext("testdata/input.txt", outDir)
+       result, err := newContext("testdata/input.txt", outDir)
        Expect(err).Should(HaveOccurred())
        Expect(err.Error()).To(ContainSubstring("invalid input file name"))
        Expect(result).To(BeNil())
@@ -102,19 +104,18 @@ func TestGetContextNoJsonFile(t *testing.T) {
 func TestGetContextInterfaceJson(t *testing.T) {
        RegisterTestingT(t)
        outDir := "test_output_directory"
-       result, err := getContext("testdata/interface.json", outDir)
+       result, err := newContext("testdata/ip.api.json", outDir)
        Expect(err).ShouldNot(HaveOccurred())
        Expect(result).ToNot(BeNil())
        Expect(result.outputFile)
-       Expect(result.outputFile).To(BeEquivalentTo(outDir + "/interfaces/interfaces.go"))
-
+       Expect(result.outputFile).To(BeEquivalentTo(outDir + "/ip/ip.ba.go"))
 }
 
 func TestReadJson(t *testing.T) {
        RegisterTestingT(t)
-       inputData, err := readFile("testdata/af_packet.api.json")
+       inputData, err := ioutil.ReadFile("testdata/af_packet.api.json")
        Expect(err).ShouldNot(HaveOccurred())
-       result, err := parseJSON(inputData)
+       result, err := parseInputJSON(inputData)
        Expect(err).ShouldNot(HaveOccurred())
        Expect(result).ToNot(BeNil())
        Expect(result.Len()).To(BeEquivalentTo(5))
@@ -122,14 +123,13 @@ func TestReadJson(t *testing.T) {
 
 func TestReadJsonError(t *testing.T) {
        RegisterTestingT(t)
-       inputData, err := readFile("testdata/input-read-json-error.json")
+       inputData, err := ioutil.ReadFile("testdata/input-read-json-error.json")
        Expect(err).ShouldNot(HaveOccurred())
-       result, err := parseJSON(inputData)
+       result, err := parseInputJSON(inputData)
        Expect(err).Should(HaveOccurred())
        Expect(result).To(BeNil())
 }
 
-/*
 func TestGeneratePackage(t *testing.T) {
        RegisterTestingT(t)
        // prepare context
@@ -137,12 +137,15 @@ func TestGeneratePackage(t *testing.T) {
        testCtx.packageName = "test-package-name"
 
        // prepare input/output output files
-       inputData, err := readFile("testdata/ip.api.json")
+       inputData, err := ioutil.ReadFile("testdata/ip.api.json")
+       Expect(err).ShouldNot(HaveOccurred())
+       jsonRoot, err := parseInputJSON(inputData)
+       Expect(err).ShouldNot(HaveOccurred())
+       testCtx.packageData, err = parsePackage(testCtx, jsonRoot)
        Expect(err).ShouldNot(HaveOccurred())
-       testCtx.inputBuff = bytes.NewBuffer(inputData)
-       inFile, _ := parseJSON(inputData)
        outDir := "test_output_directory"
-       outFile, _ := os.Create(outDir)
+       outFile, err := os.Create(outDir)
+       Expect(err).ShouldNot(HaveOccurred())
        defer os.RemoveAll(outDir)
 
        // prepare writer
@@ -152,7 +155,6 @@ func TestGeneratePackage(t *testing.T) {
        Expect(err).ShouldNot(HaveOccurred())
 }
 
-
 func TestGenerateMessageType(t *testing.T) {
        RegisterTestingT(t)
        // prepare context
@@ -160,34 +162,27 @@ func TestGenerateMessageType(t *testing.T) {
        testCtx.packageName = "test-package-name"
 
        // prepare input/output output files
-       inputData, err := readFile("testdata/ip.api.json")
+       inputData, err := ioutil.ReadFile("testdata/ip.api.json")
+       Expect(err).ShouldNot(HaveOccurred())
+       jsonRoot, err := parseInputJSON(inputData)
        Expect(err).ShouldNot(HaveOccurred())
-       testCtx.inputBuff = bytes.NewBuffer(inputData)
-       inFile, _ := parseJSON(inputData)
        outDir := "test_output_directory"
-       outFile, _ := os.Create(outDir)
+       outFile, err := os.Create(outDir)
+       Expect(err).ShouldNot(HaveOccurred())
+       testCtx.packageData, err = parsePackage(testCtx, jsonRoot)
+       Expect(err).ShouldNot(HaveOccurred())
        defer os.RemoveAll(outDir)
 
        // prepare writer
        writer := bufio.NewWriter(outFile)
 
-       types := inFile.Map("types")
-       testCtx.types = map[string]string{
-               "u32": "sw_if_index",
-               "u8":  "weight",
-       }
-       Expect(types.Len()).To(BeEquivalentTo(1))
-       for i := 0; i < types.Len(); i++ {
-               typ := types.At(i)
-               Expect(writer.Buffered()).To(BeZero())
-               err := generateMessage(testCtx, writer, typ, true)
-               Expect(err).ShouldNot(HaveOccurred())
+       for _, msg := range testCtx.packageData.Messages {
+               generateMessage(testCtx, writer, &msg)
                Expect(writer.Buffered()).ToNot(BeZero())
-
        }
 }
 
-func TestGenerateMessageName(t *testing.T) {
+/*func TestGenerateMessageName(t *testing.T) {
        RegisterTestingT(t)
        // prepare context
        testCtx := new(context)