OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [exp/] [inotify/] [inotify_linux_test.go] - Blame information for rev 747

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 747 jeremybenn
// Copyright 2010 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4
 
5
// +build linux
6
 
7
package inotify
8
 
9
import (
10
        "os"
11
        "testing"
12
        "time"
13
)
14
 
15
func TestInotifyEvents(t *testing.T) {
16
        // Create an inotify watcher instance and initialize it
17
        watcher, err := NewWatcher()
18
        if err != nil {
19
                t.Fatalf("NewWatcher() failed: %s", err)
20
        }
21
 
22
        t.Logf("NEEDS TO BE CONVERTED TO NEW GO TOOL") // TODO
23
        return
24
 
25
        // Add a watch for "_test"
26
        err = watcher.Watch("_test")
27
        if err != nil {
28
                t.Fatalf("Watcher.Watch() failed: %s", err)
29
        }
30
 
31
        // Receive errors on the error channel on a separate goroutine
32
        go func() {
33
                for err := range watcher.Error {
34
                        t.Fatalf("error received: %s", err)
35
                }
36
        }()
37
 
38
        const testFile string = "_test/TestInotifyEvents.testfile"
39
 
40
        // Receive events on the event channel on a separate goroutine
41
        eventstream := watcher.Event
42
        var eventsReceived = 0
43
        done := make(chan bool)
44
        go func() {
45
                for event := range eventstream {
46
                        // Only count relevant events
47
                        if event.Name == testFile {
48
                                eventsReceived++
49
                                t.Logf("event received: %s", event)
50
                        } else {
51
                                t.Logf("unexpected event received: %s", event)
52
                        }
53
                }
54
                done <- true
55
        }()
56
 
57
        // Create a file
58
        // This should add at least one event to the inotify event queue
59
        _, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666)
60
        if err != nil {
61
                t.Fatalf("creating test file failed: %s", err)
62
        }
63
 
64
        // We expect this event to be received almost immediately, but let's wait 1 s to be sure
65
        time.Sleep(1 * time.Second)
66
        if eventsReceived == 0 {
67
                t.Fatal("inotify event hasn't been received after 1 second")
68
        }
69
 
70
        // Try closing the inotify instance
71
        t.Log("calling Close()")
72
        watcher.Close()
73
        t.Log("waiting for the event channel to become closed...")
74
        select {
75
        case <-done:
76
                t.Log("event channel closed")
77
        case <-time.After(1 * time.Second):
78
                t.Fatal("event stream was not closed after 1 second")
79
        }
80
}
81
 
82
func TestInotifyClose(t *testing.T) {
83
        watcher, _ := NewWatcher()
84
        watcher.Close()
85
 
86
        done := make(chan bool)
87
        go func() {
88
                watcher.Close()
89
                done <- true
90
        }()
91
 
92
        select {
93
        case <-done:
94
        case <-time.After(50 * time.Millisecond):
95
                t.Fatal("double Close() test failed: second Close() call didn't return")
96
        }
97
 
98
        err := watcher.Watch("_test")
99
        if err == nil {
100
                t.Fatal("expected error on Watch() after Close(), got nil")
101
        }
102
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.