// Copyright 2017 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 main

import (
	"context"
	"testing"
	"time"

	"golang.org/x/build/maintner/maintpb"
)

func TestGCSLogWakeup_Timeout(t *testing.T) {
	testGCSLogWakeup(t, false)
}

func TestGCSLogWakeup_Activity(t *testing.T) {
	testGCSLogWakeup(t, true)
}

func testGCSLogWakeup(t *testing.T, activity bool) {
	gl := newGCSLogBase()
	waitc := make(chan bool, 1)
	ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
	defer cancel()
	go func() {
		waitc <- gl.waitSizeNot(ctx, 0)
	}()
	if activity {
		if err := gl.Log(new(maintpb.Mutation)); err != nil {
			t.Fatal(err)
		}
	}
	select {
	case got := <-waitc:
		if got != activity {
			t.Errorf("changed = %v; want %v", got, activity)
		}
	case <-time.After(2 * time.Second):
		t.Errorf("timeout")
	}
}
