| // Copyright 2016 CoreOS, Inc. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package daemon |
| |
| import ( |
| "fmt" |
| "io/ioutil" |
| "net" |
| "os" |
| "testing" |
| ) |
| |
| // TestSdNotify |
| func TestSdNotify(t *testing.T) { |
| |
| testDir, e := ioutil.TempDir("/tmp/", "test-") |
| if e != nil { |
| panic(e) |
| } |
| defer os.RemoveAll(testDir) |
| |
| notifySocket := testDir + "/notify-socket.sock" |
| laddr := net.UnixAddr{ |
| Name: notifySocket, |
| Net: "unixgram", |
| } |
| _, e = net.ListenUnixgram("unixgram", &laddr) |
| if e != nil { |
| panic(e) |
| } |
| |
| tests := []struct { |
| unsetEnv bool |
| envSocket string |
| |
| wsent bool |
| werr bool |
| }{ |
| // (true, nil) - notification supported, data has been sent |
| {false, notifySocket, true, false}, |
| // (false, err) - notification supported, but failure happened |
| {true, testDir + "/missing.sock", false, true}, |
| // (false, nil) - notification not supported |
| {true, "", false, false}, |
| } |
| |
| for i, tt := range tests { |
| must(os.Unsetenv("NOTIFY_SOCKET")) |
| if tt.envSocket != "" { |
| must(os.Setenv("NOTIFY_SOCKET", tt.envSocket)) |
| } |
| sent, err := SdNotify(tt.unsetEnv, fmt.Sprintf("TestSdNotify test message #%d", i)) |
| |
| if sent != tt.wsent { |
| t.Errorf("#%d: expected send result %t, got %t", i, tt.wsent, sent) |
| } |
| if tt.werr && err == nil { |
| t.Errorf("#%d: want non-nil err, got nil", i) |
| } else if !tt.werr && err != nil { |
| t.Errorf("#%d: want nil err, got %v", i, err) |
| } |
| if tt.unsetEnv && tt.envSocket != "" && os.Getenv("NOTIFY_SOCKET") != "" { |
| t.Errorf("#%d: environment variable not cleaned up", i) |
| } |
| |
| } |
| } |