// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package race_test

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"os"
	"path/filepath"
	"testing"
	"time"
)

func TestNoRaceIOFile(t *testing.T) {
	x := 0
	path, _ := ioutil.TempDir("", "race_test")
	fname := filepath.Join(path, "data")
	go func() {
		x = 42
		f, _ := os.Create(fname)
		f.Write([]byte("done"))
		f.Close()
	}()
	for {
		f, err := os.Open(fname)
		if err != nil {
			time.Sleep(1e6)
			continue
		}
		buf := make([]byte, 100)
		count, err := f.Read(buf)
		if count == 0 {
			time.Sleep(1e6)
			continue
		}
		break
	}
	_ = x
}

func TestNoRaceIOHttp(t *testing.T) {
	x := 0
	go func() {
		http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
			x = 41
			fmt.Fprintf(w, "test")
			x = 42
		})
		err := http.ListenAndServe("127.0.0.1:23651", nil)
		if err != nil {
			t.Fatalf("http.ListenAndServe: %v", err)
		}
	}()
	time.Sleep(1e7)
	x = 1
	_, err := http.Get("http://127.0.0.1:23651")
	if err != nil {
		t.Fatalf("http.Get: %v", err)
	}
	x = 2
	_, err = http.Get("http://127.0.0.1:23651")
	if err != nil {
		t.Fatalf("http.Get: %v", err)
	}
	x = 3
}
