title: How do I test an error on reading from a request body?
body: <p>I'm writing unit tests for http Handlers in golang. When looking at code coverage reports of this I am running into the following issue: When reading the request body from a request, <code>ioutil.ReadAll</code> might return an error that I need to handle. Yet, when I write unit tests for my handler I do not know  how to send a request to my handler in a way that it will trigger such an error (premature end of content seems not to generate such an error but will generate an error on unmarshaling the body). This is what I am trying to do:</p>
  
  <pre><code>package demo
  
  import (
      "bytes"
      "io/ioutil"
      "net/http"
      "net/http/httptest"
      "testing"
  )
  
  func HandlePostRequest(w http.ResponseWriter, r *http.Request) {
      body, bytesErr := ioutil.ReadAll(r.Body)
      if bytesErr != nil {
          // intricate logic goes here, how can i test it?
          http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
          return
      }
      defer r.Body.Close()
      // continue...
  }
  
  func TestHandlePostRequest(t *testing.T) {
      ts := httptest.NewServer(http.HandlerFunc(HandlePostRequest))
      data, _ := ioutil.ReadFile("testdata/fixture.json")
      res, err := http.Post(ts.URL, "application/json", bytes.NewReader(data))
      // continue...
  }
  </code></pre>
  
  <p>How can I write a test case for <code>HandlePostRequest</code> that also covers the case of <code>bytesErr</code> not being <code>nil</code>?</p>