Go 1.19 released, so update supported Go versions. (#721)
* Go 1.19 released, so update supported Go versions.
* Remove the usage of the deprecated ioutil package.
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 759eea2..60f763c 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -18,7 +18,7 @@
strategy:
fail-fast: false
matrix:
- go: ['1.17', '1.18', 'tip']
+ go: ['1.18', '1.19', 'tip']
# Supported macOS versions can be found in
# https://github.com/actions/virtual-environments#available-environments.
os: ['macos-10.15', 'macos-11']
@@ -106,7 +106,7 @@
strategy:
fail-fast: false
matrix:
- go: ['1.17', '1.18', 'tip']
+ go: ['1.18', '1.19', 'tip']
os: ['ubuntu-20.04', 'ubuntu-18.04']
steps:
- name: Update Go version using setup-go
@@ -166,7 +166,7 @@
strategy:
fail-fast: false
matrix:
- go: ['1.17', '1.18']
+ go: ['1.18', '1.19']
steps:
- name: Update Go version using setup-go
uses: actions/setup-go@v2
diff --git a/fuzz/fuzz_test.go b/fuzz/fuzz_test.go
index ab1a091..cbc4cc6 100644
--- a/fuzz/fuzz_test.go
+++ b/fuzz/fuzz_test.go
@@ -15,7 +15,7 @@
package pprof
import (
- "io/ioutil"
+ "os"
"runtime"
"testing"
@@ -28,13 +28,13 @@
}
const path = "testdata/"
- files, err := ioutil.ReadDir(path)
+ files, err := os.ReadDir(path)
if err != nil {
t.Errorf("Problem reading directory %s : %v", path, err)
}
for _, f := range files {
file := path + f.Name()
- inbytes, err := ioutil.ReadFile(file)
+ inbytes, err := os.ReadFile(file)
if err != nil {
t.Errorf("Problem reading file: %s : %v", file, err)
continue
diff --git a/go.mod b/go.mod
index f3f4da9..e1e10df 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
module github.com/google/pprof
-go 1.17
+go 1.18
require (
github.com/chzyer/readline v1.5.0
diff --git a/internal/driver/driver_test.go b/internal/driver/driver_test.go
index 2564eb0..a966f89 100644
--- a/internal/driver/driver_test.go
+++ b/internal/driver/driver_test.go
@@ -18,7 +18,6 @@
"bytes"
"flag"
"fmt"
- "io/ioutil"
"net"
_ "net/http/pprof"
"os"
@@ -117,7 +116,7 @@
flags := strings.Split(tc.flags, ",")
// Encode profile into a protobuf and decode it again.
- protoTempFile, err := ioutil.TempFile("", "profile_proto")
+ protoTempFile, err := os.CreateTemp("", "profile_proto")
if err != nil {
t.Errorf("cannot create tempfile: %v", err)
}
@@ -145,7 +144,7 @@
setCurrentConfig(baseConfig)
// Read the profile from the encoded protobuf
- outputTempFile, err := ioutil.TempFile("", "profile_output")
+ outputTempFile, err := os.CreateTemp("", "profile_output")
if err != nil {
t.Errorf("cannot create tempfile: %v", err)
}
@@ -180,14 +179,14 @@
if err := PProf(o2); err != nil {
t.Errorf("%s: %v", tc.source, err)
}
- b, err := ioutil.ReadFile(outputTempFile.Name())
+ b, err := os.ReadFile(outputTempFile.Name())
if err != nil {
t.Errorf("Failed to read profile %s: %v", outputTempFile.Name(), err)
}
// Read data file with expected solution
solution = "testdata/" + solution
- sbuf, err := ioutil.ReadFile(solution)
+ sbuf, err := os.ReadFile(solution)
if err != nil {
t.Fatalf("reading solution file %s: %v", solution, err)
}
@@ -215,7 +214,7 @@
}
t.Errorf("%s\n%s\n", solution, d)
if *updateFlag {
- err := ioutil.WriteFile(solution, b, 0644)
+ err := os.WriteFile(solution, b, 0644)
if err != nil {
t.Errorf("failed to update the solution file %q: %v", solution, err)
}
diff --git a/internal/driver/fetch.go b/internal/driver/fetch.go
index 0b36165..26fee83 100644
--- a/internal/driver/fetch.go
+++ b/internal/driver/fetch.go
@@ -18,7 +18,6 @@
"bytes"
"fmt"
"io"
- "io/ioutil"
"net/http"
"net/url"
"os"
@@ -507,7 +506,7 @@
func statusCodeError(resp *http.Response) error {
if resp.Header.Get("X-Go-Pprof") != "" && strings.Contains(resp.Header.Get("Content-Type"), "text/plain") {
// error is from pprof endpoint
- if body, err := ioutil.ReadAll(resp.Body); err == nil {
+ if body, err := io.ReadAll(resp.Body); err == nil {
return fmt.Errorf("server response: %s - %s", resp.Status, body)
}
}
diff --git a/internal/driver/fetch_test.go b/internal/driver/fetch_test.go
index bdd1732..289dc24 100644
--- a/internal/driver/fetch_test.go
+++ b/internal/driver/fetch_test.go
@@ -22,7 +22,6 @@
"crypto/x509"
"encoding/pem"
"fmt"
- "io/ioutil"
"math/big"
"net"
"net/http"
@@ -52,7 +51,7 @@
saveHome := os.Getenv(homeEnv())
savePath := os.Getenv("PPROF_BINARY_PATH")
- tempdir, err := ioutil.TempDir("", "home")
+ tempdir, err := os.MkdirTemp("", "home")
if err != nil {
t.Fatal("creating temp dir: ", err)
}
@@ -530,7 +529,7 @@
t.Skip("test assumes tcp available")
}
saveHome := os.Getenv(homeEnv())
- tempdir, err := ioutil.TempDir("", "home")
+ tempdir, err := os.MkdirTemp("", "home")
if err != nil {
t.Fatal("creating temp dir: ", err)
}
@@ -564,7 +563,7 @@
}()
defer l.Close()
- outputTempFile, err := ioutil.TempFile("", "profile_output")
+ outputTempFile, err := os.CreateTemp("", "profile_output")
if err != nil {
t.Fatalf("Failed to create tempfile: %v", err)
}
@@ -603,7 +602,7 @@
t.Skip("test assumes tcp available")
}
saveHome := os.Getenv(homeEnv())
- tempdir, err := ioutil.TempDir("", "home")
+ tempdir, err := os.MkdirTemp("", "home")
if err != nil {
t.Fatal("creating temp dir: ", err)
}
@@ -645,7 +644,7 @@
}()
defer l.Close()
- outputTempFile, err := ioutil.TempFile("", "profile_output")
+ outputTempFile, err := os.CreateTemp("", "profile_output")
if err != nil {
t.Fatalf("Failed to create tempfile: %v", err)
}
@@ -665,7 +664,7 @@
Symbolize: "remote",
}
- certTempFile, err := ioutil.TempFile("", "cert_output")
+ certTempFile, err := os.CreateTemp("", "cert_output")
if err != nil {
t.Errorf("cannot create cert tempfile: %v", err)
}
@@ -673,7 +672,7 @@
defer certTempFile.Close()
certTempFile.Write(certBytes)
- keyTempFile, err := ioutil.TempFile("", "key_output")
+ keyTempFile, err := os.CreateTemp("", "key_output")
if err != nil {
t.Errorf("cannot create key tempfile: %v", err)
}
diff --git a/internal/driver/settings.go b/internal/driver/settings.go
index 1e9154c..b784618 100644
--- a/internal/driver/settings.go
+++ b/internal/driver/settings.go
@@ -3,7 +3,6 @@
import (
"encoding/json"
"fmt"
- "io/ioutil"
"net/url"
"os"
"path/filepath"
@@ -33,7 +32,7 @@
// readSettings reads settings from fname.
func readSettings(fname string) (*settings, error) {
- data, err := ioutil.ReadFile(fname)
+ data, err := os.ReadFile(fname)
if err != nil {
if os.IsNotExist(err) {
return &settings{}, nil
@@ -64,7 +63,7 @@
return fmt.Errorf("failed to create settings directory: %w", err)
}
- if err := ioutil.WriteFile(fname, data, 0644); err != nil {
+ if err := os.WriteFile(fname, data, 0644); err != nil {
return fmt.Errorf("failed to write settings: %w", err)
}
return nil
diff --git a/internal/driver/settings_test.go b/internal/driver/settings_test.go
index e0ea14c..7d3aad9 100644
--- a/internal/driver/settings_test.go
+++ b/internal/driver/settings_test.go
@@ -1,7 +1,6 @@
package driver
import (
- "io/ioutil"
"net/url"
"os"
"path/filepath"
@@ -13,7 +12,7 @@
// and the name of the settings file. The caller must delete the directory when
// done.
func settingsDirAndFile(t *testing.T) (string, string) {
- tmpDir, err := ioutil.TempDir("", "pprof_settings_test")
+ tmpDir, err := os.MkdirTemp("", "pprof_settings_test")
if err != nil {
t.Fatalf("error creating temporary directory: %v", err)
}
diff --git a/internal/driver/webui_test.go b/internal/driver/webui_test.go
index 2f9b89b..474bdad 100644
--- a/internal/driver/webui_test.go
+++ b/internal/driver/webui_test.go
@@ -16,7 +16,7 @@
import (
"fmt"
- "io/ioutil"
+ "io"
"net"
"net/http"
"net/http/httptest"
@@ -116,7 +116,7 @@
t.Error("could not fetch", c.path, err)
continue
}
- data, err := ioutil.ReadAll(res.Body)
+ data, err := io.ReadAll(res.Body)
if err != nil {
t.Error("could not read response", c.path, err)
continue
@@ -148,7 +148,7 @@
t.Error("could not fetch", c.path, err)
return
}
- if _, err = ioutil.ReadAll(res.Body); err != nil {
+ if _, err = io.ReadAll(res.Body); err != nil {
t.Error("could not read response", c.path, err)
}
}()
diff --git a/internal/graph/dotgraph_test.go b/internal/graph/dotgraph_test.go
index 0a94495..b375bb6 100644
--- a/internal/graph/dotgraph_test.go
+++ b/internal/graph/dotgraph_test.go
@@ -18,7 +18,7 @@
"bytes"
"flag"
"fmt"
- "io/ioutil"
+ "os"
"path/filepath"
"reflect"
"strconv"
@@ -214,7 +214,7 @@
func compareGraphs(t *testing.T, got []byte, wantFile string) {
wantFile = filepath.Join("testdata", wantFile)
- want, err := ioutil.ReadFile(wantFile)
+ want, err := os.ReadFile(wantFile)
if err != nil {
t.Fatalf("error reading test file %s: %v", wantFile, err)
}
@@ -226,7 +226,7 @@
}
t.Errorf("Compose incorrectly wrote %s", string(d))
if *updateFlag {
- err := ioutil.WriteFile(wantFile, got, 0644)
+ err := os.WriteFile(wantFile, got, 0644)
if err != nil {
t.Errorf("failed to update the golden file %q: %v", wantFile, err)
}
diff --git a/internal/proftest/proftest.go b/internal/proftest/proftest.go
index 160eb66..c4f8910 100644
--- a/internal/proftest/proftest.go
+++ b/internal/proftest/proftest.go
@@ -20,7 +20,6 @@
"encoding/json"
"fmt"
"io"
- "io/ioutil"
"os"
"os/exec"
"regexp"
@@ -31,14 +30,14 @@
// differences. It is meant for testing purposes to display the
// differences between expected and actual output.
func Diff(b1, b2 []byte) (data []byte, err error) {
- f1, err := ioutil.TempFile("", "proto_test")
+ f1, err := os.CreateTemp("", "proto_test")
if err != nil {
return nil, err
}
defer os.Remove(f1.Name())
defer f1.Close()
- f2, err := ioutil.TempFile("", "proto_test")
+ f2, err := os.CreateTemp("", "proto_test")
if err != nil {
return nil, err
}
diff --git a/internal/report/report_test.go b/internal/report/report_test.go
index 9b394fb..b3e70b2 100644
--- a/internal/report/report_test.go
+++ b/internal/report/report_test.go
@@ -16,7 +16,7 @@
import (
"bytes"
- "io/ioutil"
+ "os"
"regexp"
"runtime"
"strings"
@@ -76,7 +76,7 @@
t.Fatalf("%s: %v", tc.want, err)
}
- gold, err := ioutil.ReadFile(tc.want)
+ gold, err := os.ReadFile(tc.want)
if err != nil {
t.Fatalf("%s: %v", tc.want, err)
}
diff --git a/internal/report/source_test.go b/internal/report/source_test.go
index 2a6b9cf..2febfd1 100644
--- a/internal/report/source_test.go
+++ b/internal/report/source_test.go
@@ -17,7 +17,6 @@
import (
"bytes"
"fmt"
- "io/ioutil"
"os"
"path/filepath"
"regexp"
@@ -123,7 +122,7 @@
}
func TestOpenSourceFile(t *testing.T) {
- tempdir, err := ioutil.TempDir("", "")
+ tempdir, err := os.MkdirTemp("", "")
if err != nil {
t.Fatalf("failed to create temp dir: %v", err)
}
@@ -195,7 +194,7 @@
if err := os.MkdirAll(dir, 0755); err != nil {
t.Fatalf("failed to create dir %q: %v", dir, err)
}
- if err := ioutil.WriteFile(path, nil, 0644); err != nil {
+ if err := os.WriteFile(path, nil, 0644); err != nil {
t.Fatalf("failed to create file %q: %v", path, err)
}
}
diff --git a/internal/symbolizer/symbolizer.go b/internal/symbolizer/symbolizer.go
index d243b80..87f202b 100644
--- a/internal/symbolizer/symbolizer.go
+++ b/internal/symbolizer/symbolizer.go
@@ -19,7 +19,7 @@
import (
"fmt"
- "io/ioutil"
+ "io"
"net/http"
"net/url"
"path/filepath"
@@ -110,13 +110,13 @@
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("http post %s: %v", source, statusCodeError(resp))
}
- return ioutil.ReadAll(resp.Body)
+ return io.ReadAll(resp.Body)
}
func statusCodeError(resp *http.Response) error {
if resp.Header.Get("X-Go-Pprof") != "" && strings.Contains(resp.Header.Get("Content-Type"), "text/plain") {
// error is from pprof endpoint
- if body, err := ioutil.ReadAll(resp.Body); err == nil {
+ if body, err := io.ReadAll(resp.Body); err == nil {
return fmt.Errorf("server response: %s - %s", resp.Status, body)
}
}
diff --git a/internal/transport/transport.go b/internal/transport/transport.go
index b5fb1dd..6c3bd0d 100644
--- a/internal/transport/transport.go
+++ b/internal/transport/transport.go
@@ -20,8 +20,8 @@
"crypto/tls"
"crypto/x509"
"fmt"
- "io/ioutil"
"net/http"
+ "os"
"sync"
"github.com/google/pprof/internal/plugin"
@@ -86,7 +86,7 @@
if ca != "" {
caCertPool := x509.NewCertPool()
- caCert, err := ioutil.ReadFile(ca)
+ caCert, err := os.ReadFile(ca)
if err != nil {
return fmt.Errorf("could not load CA specified by -tls_ca: %v", err)
}
diff --git a/profile/profile.go b/profile/profile.go
index 5a3807f..4ec00fe 100644
--- a/profile/profile.go
+++ b/profile/profile.go
@@ -21,7 +21,6 @@
"compress/gzip"
"fmt"
"io"
- "io/ioutil"
"math"
"path/filepath"
"regexp"
@@ -153,7 +152,7 @@
// may be a gzip-compressed encoded protobuf or one of many legacy
// profile formats which may be unsupported in the future.
func Parse(r io.Reader) (*Profile, error) {
- data, err := ioutil.ReadAll(r)
+ data, err := io.ReadAll(r)
if err != nil {
return nil, err
}
@@ -168,7 +167,7 @@
if len(data) >= 2 && data[0] == 0x1f && data[1] == 0x8b {
gz, err := gzip.NewReader(bytes.NewBuffer(data))
if err == nil {
- data, err = ioutil.ReadAll(gz)
+ data, err = io.ReadAll(gz)
}
if err != nil {
return nil, fmt.Errorf("decompressing profile: %v", err)
diff --git a/profile/profile_test.go b/profile/profile_test.go
index ee8da7e..7767004 100644
--- a/profile/profile_test.go
+++ b/profile/profile_test.go
@@ -18,7 +18,7 @@
"bytes"
"flag"
"fmt"
- "io/ioutil"
+ "os"
"path/filepath"
"reflect"
"strings"
@@ -49,7 +49,7 @@
"java.heap",
"java.contention",
} {
- inbytes, err := ioutil.ReadFile(filepath.Join(path, source))
+ inbytes, err := os.ReadFile(filepath.Join(path, source))
if err != nil {
t.Fatal(err)
}
@@ -61,12 +61,12 @@
js := p.String()
goldFilename := path + source + ".string"
if *update {
- err := ioutil.WriteFile(goldFilename, []byte(js), 0644)
+ err := os.WriteFile(goldFilename, []byte(js), 0644)
if err != nil {
t.Errorf("failed to update the golden file file %q: %v", goldFilename, err)
}
}
- gold, err := ioutil.ReadFile(goldFilename)
+ gold, err := os.ReadFile(goldFilename)
if err != nil {
t.Fatalf("%s: %v", source, err)
}
@@ -134,7 +134,7 @@
func TestCheckValid(t *testing.T) {
const path = "testdata/java.cpu"
- inbytes, err := ioutil.ReadFile(path)
+ inbytes, err := os.ReadFile(path)
if err != nil {
t.Fatalf("failed to read profile file %q: %v", path, err)
}
@@ -196,7 +196,7 @@
// temp filename. This is useful to recover a profile when the test
// fails.
func leaveTempfile(b []byte) string {
- f1, err := ioutil.TempFile("", "profile_test")
+ f1, err := os.CreateTemp("", "profile_test")
if err != nil {
panic(err)
}