mirror of
https://github.com/reactos/syzkaller.git
synced 2024-11-28 05:40:26 +00:00
76ee49defb
TestTransitivelyEnabledCalls detects when there is a resource that has no ctors, but it does not provide any details (e.g. resource name). Add another test that detects exact resource that can't be created.
63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
// Copyright 2015 syzkaller project authors. All rights reserved.
|
|
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
|
|
|
|
package sys
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestResourceCtors(t *testing.T) {
|
|
for _, c := range Calls {
|
|
for _, res := range c.InputResources() {
|
|
if len(resourceCtors(res.Desc.Kind, true)) == 0 {
|
|
t.Errorf("call %v requires input resource %v, but there are no calls that can create this resource", c.Name, res.Desc.Name)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestTransitivelyEnabledCalls(t *testing.T) {
|
|
t.Parallel()
|
|
calls := make(map[*Call]bool)
|
|
for _, c := range Calls {
|
|
calls[c] = true
|
|
}
|
|
if trans := TransitivelyEnabledCalls(calls); len(calls) != len(trans) {
|
|
for c := range calls {
|
|
if !trans[c] {
|
|
t.Logf("disabled %v", c.Name)
|
|
}
|
|
}
|
|
t.Fatalf("can't create some resource")
|
|
}
|
|
delete(calls, CallMap["epoll_create"])
|
|
if trans := TransitivelyEnabledCalls(calls); len(calls) != len(trans) {
|
|
t.Fatalf("still must be able to create epoll fd with epoll_create1")
|
|
}
|
|
delete(calls, CallMap["epoll_create1"])
|
|
trans := TransitivelyEnabledCalls(calls)
|
|
if len(calls)-5 != len(trans) ||
|
|
trans[CallMap["epoll_ctl$EPOLL_CTL_ADD"]] ||
|
|
trans[CallMap["epoll_ctl$EPOLL_CTL_MOD"]] ||
|
|
trans[CallMap["epoll_ctl$EPOLL_CTL_DEL"]] ||
|
|
trans[CallMap["epoll_wait"]] ||
|
|
trans[CallMap["epoll_pwait"]] {
|
|
t.Fatalf("epoll fd is not disabled")
|
|
}
|
|
}
|
|
|
|
func TestClockGettime(t *testing.T) {
|
|
t.Parallel()
|
|
calls := make(map[*Call]bool)
|
|
for _, c := range Calls {
|
|
calls[c] = true
|
|
}
|
|
// Removal of clock_gettime should disable all calls that accept timespec/timeval.
|
|
delete(calls, CallMap["clock_gettime"])
|
|
trans := TransitivelyEnabledCalls(calls)
|
|
if len(trans)+10 > len(calls) {
|
|
t.Fatalf("clock_gettime did not disable enough calls: before %v, after %v", len(calls), len(trans))
|
|
}
|
|
}
|