github.com/whtcorpsinc/milevadb-prod@v0.0.0-20211104133533-f57f4be3b597/soliton/systimemon/systime_mon_test.go (about)

     1  // Copyright 2020 WHTCORPS INC, Inc.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package systimemon
    15  
    16  import (
    17  	"sync/atomic"
    18  	"testing"
    19  	"time"
    20  
    21  	. "github.com/whtcorpsinc/check"
    22  )
    23  
    24  func TestT(t *testing.T) {
    25  	TestingT(t)
    26  }
    27  
    28  func TestSystimeMonitor(t *testing.T) {
    29  	var jumpForward int32
    30  
    31  	trigged := false
    32  	go StartMonitor(
    33  		func() time.Time {
    34  			if !trigged {
    35  				trigged = true
    36  				return time.Now()
    37  			}
    38  
    39  			return time.Now().Add(-2 * time.Second)
    40  		}, func() {
    41  			atomic.StoreInt32(&jumpForward, 1)
    42  		}, func() {})
    43  
    44  	time.Sleep(1 * time.Second)
    45  
    46  	if atomic.LoadInt32(&jumpForward) != 1 {
    47  		t.Error("should detect time error")
    48  	}
    49  }