Forráskód Böngészése

fix testcase issue

RockyJin 5 éve
szülő
commit
2f7ef049a1

+ 13 - 8
xstream/extensions/edgex_source.go

@@ -123,7 +123,7 @@ func (es *EdgexSource) Open(ctx api.StreamContext, consumer chan<- api.SourceTup
 						result := make(map[string]interface{})
 						meta := make(map[string]interface{})
 
-						log.Debugf("receive message from device %s", e.Device)
+						log.Debugf("receive message %s from device %s", env.Payload, e.Device)
 						for _, r := range e.Readings {
 							if r.Name != "" {
 								if v, err := es.getValue(r, log); err != nil {
@@ -172,6 +172,7 @@ func (es *EdgexSource) Open(ctx api.StreamContext, consumer chan<- api.SourceTup
 
 func (es *EdgexSource) getValue(r models.Reading, logger api.Logger) (interface{}, error) {
 	t, err := es.getType(r.Name, logger)
+	var ot = t
 	if err != nil {
 		return nil, err
 	}
@@ -198,6 +199,9 @@ func (es *EdgexSource) getValue(r models.Reading, logger api.Logger) (interface{
 			return u64, nil
 		}
 	case "FLOAT32", "FLOAT64":
+		if r.ValueType == "" {
+			r.ValueType = ot
+		}
 		return es.getFloatValue(r, logger)
 	case "STRING":
 		return v, nil
@@ -219,7 +223,7 @@ func (es *EdgexSource) getFloatValue(r models.Reading, logger api.Logger) (inter
 	}
 	switch r.ValueType {
 	case models.ValueTypeFloat32:
-		var value float32
+		var value float64
 
 		switch r.FloatEncoding {
 		case models.Base64Encoding:
@@ -227,21 +231,21 @@ func (es *EdgexSource) getFloatValue(r models.Reading, logger api.Logger) (inter
 			if err != nil {
 				return false, fmt.Errorf("unable to Base 64 decode float32 value ('%s'): %s", r.Value, err.Error())
 			}
-
-			err = binary.Read(bytes.NewReader(data), binary.BigEndian, &value)
+			var value1 float32
+			err = binary.Read(bytes.NewReader(data), binary.BigEndian, &value1)
 			if err != nil {
 				return false, fmt.Errorf("unable to decode float32 value bytes: %s", err.Error())
 			}
-
+			value = float64(value1)
 		case models.ENotation:
 			var err error
 			var temp float64
-			temp, err = strconv.ParseFloat(r.Value, 32)
+			temp, err = strconv.ParseFloat(r.Value, 64)
 			if err != nil {
 				return false, fmt.Errorf("unable to parse Float64 eNotation value: %s", err.Error())
 			}
 
-			value = float32(temp)
+			value = float64(temp)
 
 		default:
 			return false, fmt.Errorf("unkown FloatEncoding for float32 value: %s", r.FloatEncoding)
@@ -273,8 +277,9 @@ func (es *EdgexSource) getFloatValue(r models.Reading, logger api.Logger) (inter
 		default:
 			return false, fmt.Errorf("unkown FloatEncoding for float64 value: %s", r.FloatEncoding)
 		}
+	default:
+		return nil, fmt.Errorf("unkown value type: %s", r.ValueType)
 	}
-	return nil, fmt.Errorf("unkown FloatEncoding type: %s", r.FloatEncoding)
 }
 
 

+ 15 - 4
xstream/extensions/edgex_source_test.go

@@ -18,10 +18,10 @@ var es = EdgexSource{valueDescs: map[string]string{
 	"i5" : "UINT8",
 	"i6" : "UINT16",
 	"i7" : "UINT32",
-	"f1" : "FLOAT32",
-	"f2" : "FLOAT64",
 	"s1" : "String",
-	"i8" : "UINT64", //i8 will be handled by special case
+	"f1" : "Float32", //FLOAT32 will be handled by special case
+	"f2" : "Float64", //FLOAT64 will be handled by special case
+	"i8" : "UINT64",  //UINT64 will be handled by special case
 	},
 }
 
@@ -40,6 +40,17 @@ func TestGetValue_Int(t *testing.T) {
 		}
 	}
 
+	rf_01 := models.Reading{Name:"f1", Value:"fwtOaw=="}
+	if v, e := es.getValue(rf_01, common.Log); e != nil {
+		t.Errorf("%s", e)
+	} else {
+		if v1, ok := v.(float32); ok {
+			if v1 != 1.8516986e+38 {
+				t.Errorf("expected 1.8516986e+38, but it's %f.", v1)
+			}
+		}
+	}
+
 	r1 := models.Reading{Name: "i8", Value: "10796529505058023104"}
 	if v, e := es.getValue(r1, common.Log); e != nil {
 		t.Errorf("%s", e)
@@ -84,7 +95,7 @@ func expectPi(t *testing.T, expected interface{}) {
 			t.Errorf("expected 3.14, but it's %f.", v1)
 		}
 	} else {
-		t.Errorf("expected float type, but it's %t.", expected)
+		t.Errorf("expected float type, but it's %T.", expected)
 	}
 }