...

Source file src/google.golang.org/grpc/codes/codes_test.go

Documentation: google.golang.org/grpc/codes

     1  /*
     2   *
     3   * Copyright 2017 gRPC authors.
     4   *
     5   * Licensed under the Apache License, Version 2.0 (the "License");
     6   * you may not use this file except in compliance with the License.
     7   * You may obtain a copy of the License at
     8   *
     9   *     http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   *
    17   */
    18  
    19  package codes
    20  
    21  import (
    22  	"encoding/json"
    23  	"strings"
    24  	"testing"
    25  
    26  	"github.com/google/go-cmp/cmp"
    27  	cpb "google.golang.org/genproto/googleapis/rpc/code"
    28  	"google.golang.org/grpc/internal/grpctest"
    29  )
    30  
    31  type s struct {
    32  	grpctest.Tester
    33  }
    34  
    35  func Test(t *testing.T) {
    36  	grpctest.RunSubTests(t, s{})
    37  }
    38  
    39  func (s) TestUnmarshalJSON(t *testing.T) {
    40  	for s, v := range cpb.Code_value {
    41  		want := Code(v)
    42  		var got Code
    43  		if err := got.UnmarshalJSON([]byte(`"` + s + `"`)); err != nil || got != want {
    44  			t.Errorf("got.UnmarshalJSON(%q) = %v; want <nil>.  got=%v; want %v", s, err, got, want)
    45  		}
    46  	}
    47  }
    48  
    49  func (s) TestJSONUnmarshal(t *testing.T) {
    50  	var got []Code
    51  	want := []Code{OK, NotFound, Internal, Canceled}
    52  	in := `["OK", "NOT_FOUND", "INTERNAL", "CANCELLED"]`
    53  	err := json.Unmarshal([]byte(in), &got)
    54  	if err != nil || !cmp.Equal(got, want) {
    55  		t.Fatalf("json.Unmarshal(%q, &got) = %v; want <nil>.  got=%v; want %v", in, err, got, want)
    56  	}
    57  }
    58  
    59  func (s) TestUnmarshalJSON_NilReceiver(t *testing.T) {
    60  	var got *Code
    61  	in := OK.String()
    62  	if err := got.UnmarshalJSON([]byte(in)); err == nil {
    63  		t.Errorf("got.UnmarshalJSON(%q) = nil; want <non-nil>.  got=%v", in, got)
    64  	}
    65  }
    66  
    67  func (s) TestUnmarshalJSON_UnknownInput(t *testing.T) {
    68  	var got Code
    69  	for _, in := range [][]byte{[]byte(""), []byte("xxx"), []byte("Code(17)"), nil} {
    70  		if err := got.UnmarshalJSON([]byte(in)); err == nil {
    71  			t.Errorf("got.UnmarshalJSON(%q) = nil; want <non-nil>.  got=%v", in, got)
    72  		}
    73  	}
    74  }
    75  
    76  func (s) TestUnmarshalJSON_MarshalUnmarshal(t *testing.T) {
    77  	for i := 0; i < _maxCode; i++ {
    78  		var cUnMarshaled Code
    79  		c := Code(i)
    80  
    81  		cJSON, err := json.Marshal(c)
    82  		if err != nil {
    83  			t.Errorf("marshalling %q failed: %v", c, err)
    84  		}
    85  
    86  		if err := json.Unmarshal(cJSON, &cUnMarshaled); err != nil {
    87  			t.Errorf("unmarshalling code failed: %s", err)
    88  		}
    89  
    90  		if c != cUnMarshaled {
    91  			t.Errorf("code is %q after marshalling/unmarshalling, expected %q", cUnMarshaled, c)
    92  		}
    93  	}
    94  }
    95  
    96  func (s) TestUnmarshalJSON_InvalidIntegerCode(t *testing.T) {
    97  	const wantErr = "invalid code: 200" // for integer invalid code, expect integer value in error message
    98  
    99  	var got Code
   100  	if err := got.UnmarshalJSON([]byte("200")); !strings.Contains(err.Error(), wantErr) {
   101  		t.Errorf("got.UnmarshalJSON(200) = %v; wantErr: %v", err, wantErr)
   102  	}
   103  }
   104  

View as plain text