github.com/kaituanwang/hyperledger@v2.0.1+incompatible/internal/configtxlator/rest/configtxlator_handlers_test.go (about)

     1  /*
     2  Copyright IBM Corp. 2017 All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package rest
     8  
     9  import (
    10  	"bytes"
    11  	"mime/multipart"
    12  	"net/http"
    13  	"net/http/httptest"
    14  	"testing"
    15  
    16  	cb "github.com/hyperledger/fabric-protos-go/common"
    17  	"github.com/hyperledger/fabric/protoutil"
    18  	"github.com/stretchr/testify/assert"
    19  )
    20  
    21  func TestProtolatorComputeConfigUpdate(t *testing.T) {
    22  	originalConfig := protoutil.MarshalOrPanic(&cb.Config{
    23  		ChannelGroup: &cb.ConfigGroup{
    24  			ModPolicy: "foo",
    25  		},
    26  	})
    27  
    28  	updatedConfig := protoutil.MarshalOrPanic(&cb.Config{
    29  		ChannelGroup: &cb.ConfigGroup{
    30  			ModPolicy: "bar",
    31  		},
    32  	})
    33  
    34  	buffer := &bytes.Buffer{}
    35  	mpw := multipart.NewWriter(buffer)
    36  
    37  	ffw, err := mpw.CreateFormFile("original", "foo")
    38  	assert.NoError(t, err)
    39  	_, err = bytes.NewReader(originalConfig).WriteTo(ffw)
    40  	assert.NoError(t, err)
    41  
    42  	ffw, err = mpw.CreateFormFile("updated", "bar")
    43  	assert.NoError(t, err)
    44  	_, err = bytes.NewReader(updatedConfig).WriteTo(ffw)
    45  	assert.NoError(t, err)
    46  
    47  	err = mpw.Close()
    48  	assert.NoError(t, err)
    49  
    50  	req, err := http.NewRequest("POST", "/configtxlator/compute/update-from-configs", buffer)
    51  	assert.NoError(t, err)
    52  
    53  	req.Header.Set("Content-Type", mpw.FormDataContentType())
    54  	rec := httptest.NewRecorder()
    55  	r := NewRouter()
    56  	r.ServeHTTP(rec, req)
    57  
    58  	assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String())
    59  }
    60  
    61  func TestProtolatorMissingOriginal(t *testing.T) {
    62  	updatedConfig := protoutil.MarshalOrPanic(&cb.Config{
    63  		ChannelGroup: &cb.ConfigGroup{
    64  			ModPolicy: "bar",
    65  		},
    66  	})
    67  
    68  	buffer := &bytes.Buffer{}
    69  	mpw := multipart.NewWriter(buffer)
    70  
    71  	ffw, err := mpw.CreateFormFile("updated", "bar")
    72  	assert.NoError(t, err)
    73  	_, err = bytes.NewReader(updatedConfig).WriteTo(ffw)
    74  	assert.NoError(t, err)
    75  
    76  	err = mpw.Close()
    77  	assert.NoError(t, err)
    78  
    79  	req, err := http.NewRequest("POST", "/configtxlator/compute/update-from-configs", buffer)
    80  	assert.NoError(t, err)
    81  
    82  	req.Header.Set("Content-Type", mpw.FormDataContentType())
    83  	rec := httptest.NewRecorder()
    84  	r := NewRouter()
    85  	r.ServeHTTP(rec, req)
    86  
    87  	assert.Equal(t, http.StatusBadRequest, rec.Code)
    88  }
    89  
    90  func TestProtolatorMissingUpdated(t *testing.T) {
    91  	originalConfig := protoutil.MarshalOrPanic(&cb.Config{
    92  		ChannelGroup: &cb.ConfigGroup{
    93  			ModPolicy: "bar",
    94  		},
    95  	})
    96  
    97  	buffer := &bytes.Buffer{}
    98  	mpw := multipart.NewWriter(buffer)
    99  
   100  	ffw, err := mpw.CreateFormFile("original", "bar")
   101  	assert.NoError(t, err)
   102  	_, err = bytes.NewReader(originalConfig).WriteTo(ffw)
   103  	assert.NoError(t, err)
   104  
   105  	err = mpw.Close()
   106  	assert.NoError(t, err)
   107  
   108  	req, err := http.NewRequest("POST", "/configtxlator/compute/update-from-configs", buffer)
   109  	assert.NoError(t, err)
   110  
   111  	req.Header.Set("Content-Type", mpw.FormDataContentType())
   112  	rec := httptest.NewRecorder()
   113  	r := NewRouter()
   114  	r.ServeHTTP(rec, req)
   115  
   116  	assert.Equal(t, http.StatusBadRequest, rec.Code)
   117  }
   118  
   119  func TestProtolatorCorruptProtos(t *testing.T) {
   120  	originalConfig := []byte("Garbage")
   121  	updatedConfig := []byte("MoreGarbage")
   122  
   123  	buffer := &bytes.Buffer{}
   124  	mpw := multipart.NewWriter(buffer)
   125  
   126  	ffw, err := mpw.CreateFormFile("original", "bar")
   127  	assert.NoError(t, err)
   128  	_, err = bytes.NewReader(originalConfig).WriteTo(ffw)
   129  	assert.NoError(t, err)
   130  
   131  	ffw, err = mpw.CreateFormFile("updated", "bar")
   132  	assert.NoError(t, err)
   133  	_, err = bytes.NewReader(updatedConfig).WriteTo(ffw)
   134  	assert.NoError(t, err)
   135  
   136  	err = mpw.Close()
   137  	assert.NoError(t, err)
   138  
   139  	req, err := http.NewRequest("POST", "/configtxlator/compute/update-from-configs", buffer)
   140  	assert.NoError(t, err)
   141  
   142  	req.Header.Set("Content-Type", mpw.FormDataContentType())
   143  	rec := httptest.NewRecorder()
   144  	r := NewRouter()
   145  	r.ServeHTTP(rec, req)
   146  
   147  	assert.Equal(t, http.StatusBadRequest, rec.Code)
   148  }