| 1831 | func (mc *mockConn) SetReadDeadline(t time.Time) error { return nil } |
| 1832 | |
| 1833 | func TestTimeoutWriterRecovery(t *testing.T) { |
| 1834 | mc := &mockConn{temporaryFailures: 2} |
| 1835 | tw := &timeoutWriter{ |
| 1836 | timeout: time.Second, |
| 1837 | conn: mc, |
| 1838 | } |
| 1839 | n, err := tw.Write([]byte("foo")) |
| 1840 | if err == nil { |
| 1841 | t.Fatal("Unexpected success") |
| 1842 | } |
| 1843 | if n != 0 { |
| 1844 | t.Fatalf("Expected 0 bytes, got %d", n) |
| 1845 | } |
| 1846 | n, err = tw.Write([]byte("bar")) |
| 1847 | if err == nil { |
| 1848 | t.Fatal("Unexpected success") |
| 1849 | } |
| 1850 | if n != 0 { |
| 1851 | t.Fatalf("Expected 0 bytes, got: %d", n) |
| 1852 | } |
| 1853 | |
| 1854 | // Should succeed since it was a temporary error. |
| 1855 | testData := []byte("quux") |
| 1856 | n, err = tw.Write(testData) |
| 1857 | if err != nil { |
| 1858 | t.Fatalf("Expected success, got: %v", err) |
| 1859 | } |
| 1860 | if n != len(testData) { |
| 1861 | t.Fatalf("Expected %d, got: %d", len(testData), n) |
| 1862 | } |
| 1863 | if !bytes.Equal(mc.data, testData) { |
| 1864 | t.Fatalf("Expected %q, got: %q", testData, mc.data) |
| 1865 | } |
| 1866 | testData2 := []byte("quuz") |
| 1867 | n, err = tw.Write(testData2) |
| 1868 | if err != nil { |
| 1869 | t.Fatalf("Expected success, got: %v", err) |
| 1870 | } |
| 1871 | if n != len(testData2) { |
| 1872 | t.Fatalf("Expected %d bytes written, got %d", len(testData2), n) |
| 1873 | } |
| 1874 | expectedData := append(testData, testData2...) |
| 1875 | if !bytes.Equal(mc.data, expectedData) { |
| 1876 | t.Fatalf("Expected data %q, got %q", expectedData, mc.data) |
| 1877 | } |
| 1878 | } |
| 1879 | |
| 1880 | func TestValidateSubject(t *testing.T) { |
| 1881 | tests := []struct { |