allows configuring NPD image version in node e2e test and fix the test
This commit is contained in:
@@ -45,13 +45,14 @@ var _ = framework.KubeDescribe("NodeProblemDetector [NodeFeature:NodeProblemDete
|
||||
pollInterval = 1 * time.Second
|
||||
pollConsistent = 5 * time.Second
|
||||
pollTimeout = 1 * time.Minute
|
||||
image = "k8s.gcr.io/node-problem-detector:v0.4.1"
|
||||
)
|
||||
f := framework.NewDefaultFramework("node-problem-detector")
|
||||
var c clientset.Interface
|
||||
var uid string
|
||||
var ns, name, configName, eventNamespace string
|
||||
var bootTime, nodeTime time.Time
|
||||
var image string
|
||||
|
||||
BeforeEach(func() {
|
||||
c = f.ClientSet
|
||||
ns = f.Namespace.Name
|
||||
@@ -60,6 +61,8 @@ var _ = framework.KubeDescribe("NodeProblemDetector [NodeFeature:NodeProblemDete
|
||||
configName = "node-problem-detector-config-" + uid
|
||||
// There is no namespace for Node, event recorder will set default namespace for node events.
|
||||
eventNamespace = metav1.NamespaceDefault
|
||||
image = getNodeProblemDetectorImage()
|
||||
By(fmt.Sprintf("Using node-problem-detector image: %s", image))
|
||||
})
|
||||
|
||||
// Test system log monitor. We may add other tests if we have more problem daemons in the future.
|
||||
@@ -245,7 +248,8 @@ var _ = framework.KubeDescribe("NodeProblemDetector [NodeFeature:NodeProblemDete
|
||||
timestamp time.Time
|
||||
message string
|
||||
messageNum int
|
||||
events int
|
||||
tempEvents int // Events for temp errors
|
||||
totalEvents int // Events for both temp errors and condition changes
|
||||
conditionReason string
|
||||
conditionMessage string
|
||||
conditionType v1.ConditionStatus
|
||||
@@ -279,7 +283,8 @@ var _ = framework.KubeDescribe("NodeProblemDetector [NodeFeature:NodeProblemDete
|
||||
timestamp: nodeTime,
|
||||
message: tempMessage,
|
||||
messageNum: 3,
|
||||
events: 3,
|
||||
tempEvents: 3,
|
||||
totalEvents: 3,
|
||||
conditionReason: defaultReason,
|
||||
conditionMessage: defaultMessage,
|
||||
conditionType: v1.ConditionFalse,
|
||||
@@ -289,7 +294,8 @@ var _ = framework.KubeDescribe("NodeProblemDetector [NodeFeature:NodeProblemDete
|
||||
timestamp: nodeTime,
|
||||
message: permMessage1,
|
||||
messageNum: 1,
|
||||
events: 3, // event number should not change
|
||||
tempEvents: 3, // event number for temp errors should not change
|
||||
totalEvents: 4, // add 1 event for condition change
|
||||
conditionReason: permReason1,
|
||||
conditionMessage: permMessage1,
|
||||
conditionType: v1.ConditionTrue,
|
||||
@@ -299,7 +305,8 @@ var _ = framework.KubeDescribe("NodeProblemDetector [NodeFeature:NodeProblemDete
|
||||
timestamp: nodeTime.Add(5 * time.Minute),
|
||||
message: tempMessage,
|
||||
messageNum: 3,
|
||||
events: 6,
|
||||
tempEvents: 6, // add 3 events for temp errors
|
||||
totalEvents: 7, // add 3 events for temp errors
|
||||
conditionReason: permReason1,
|
||||
conditionMessage: permMessage1,
|
||||
conditionType: v1.ConditionTrue,
|
||||
@@ -309,7 +316,8 @@ var _ = framework.KubeDescribe("NodeProblemDetector [NodeFeature:NodeProblemDete
|
||||
timestamp: nodeTime.Add(5 * time.Minute),
|
||||
message: permMessage1 + "different message",
|
||||
messageNum: 1,
|
||||
events: 6, // event number should not change
|
||||
tempEvents: 6, // event number should not change
|
||||
totalEvents: 7, // event number should not change
|
||||
conditionReason: permReason1,
|
||||
conditionMessage: permMessage1,
|
||||
conditionType: v1.ConditionTrue,
|
||||
@@ -319,7 +327,8 @@ var _ = framework.KubeDescribe("NodeProblemDetector [NodeFeature:NodeProblemDete
|
||||
timestamp: nodeTime.Add(5 * time.Minute),
|
||||
message: permMessage2,
|
||||
messageNum: 1,
|
||||
events: 6, // event number should not change
|
||||
tempEvents: 6, // event number for temp errors should not change
|
||||
totalEvents: 8, // add 1 event for condition change
|
||||
conditionReason: permReason2,
|
||||
conditionMessage: permMessage2,
|
||||
conditionType: v1.ConditionTrue,
|
||||
@@ -332,13 +341,17 @@ var _ = framework.KubeDescribe("NodeProblemDetector [NodeFeature:NodeProblemDete
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
}
|
||||
|
||||
By(fmt.Sprintf("Wait for %d events generated", test.events))
|
||||
By(fmt.Sprintf("Wait for %d temp events generated", test.tempEvents))
|
||||
Eventually(func() error {
|
||||
return verifyEvents(c.CoreV1().Events(eventNamespace), eventListOptions, test.events, tempReason, tempMessage)
|
||||
return verifyEvents(c.CoreV1().Events(eventNamespace), eventListOptions, test.tempEvents, tempReason, tempMessage)
|
||||
}, pollTimeout, pollInterval).Should(Succeed())
|
||||
By(fmt.Sprintf("Make sure only %d events generated", test.events))
|
||||
By(fmt.Sprintf("Wait for %d total events generated", test.totalEvents))
|
||||
Eventually(func() error {
|
||||
return verifyTotalEvents(c.CoreV1().Events(eventNamespace), eventListOptions, test.totalEvents)
|
||||
}, pollTimeout, pollInterval).Should(Succeed())
|
||||
By(fmt.Sprintf("Make sure only %d total events generated", test.totalEvents))
|
||||
Consistently(func() error {
|
||||
return verifyEvents(c.CoreV1().Events(eventNamespace), eventListOptions, test.events, tempReason, tempMessage)
|
||||
return verifyTotalEvents(c.CoreV1().Events(eventNamespace), eventListOptions, test.totalEvents)
|
||||
}, pollConsistent, pollInterval).Should(Succeed())
|
||||
|
||||
By(fmt.Sprintf("Make sure node condition %q is set", condition))
|
||||
@@ -390,7 +403,7 @@ func injectLog(file string, timestamp time.Time, log string, num int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// verifyEvents verifies there are num specific events generated
|
||||
// verifyEvents verifies there are num specific events generated with given reason and message.
|
||||
func verifyEvents(e coreclientset.EventInterface, options metav1.ListOptions, num int, reason, message string) error {
|
||||
events, err := e.List(options)
|
||||
if err != nil {
|
||||
@@ -399,7 +412,7 @@ func verifyEvents(e coreclientset.EventInterface, options metav1.ListOptions, nu
|
||||
count := 0
|
||||
for _, event := range events.Items {
|
||||
if event.Reason != reason || event.Message != message {
|
||||
return fmt.Errorf("unexpected event: %v", event)
|
||||
continue
|
||||
}
|
||||
count += int(event.Count)
|
||||
}
|
||||
@@ -409,14 +422,18 @@ func verifyEvents(e coreclientset.EventInterface, options metav1.ListOptions, nu
|
||||
return nil
|
||||
}
|
||||
|
||||
// verifyNoEvents verifies there is no event generated
|
||||
func verifyNoEvents(e coreclientset.EventInterface, options metav1.ListOptions) error {
|
||||
// verifyTotalEvents verifies there are num events in total.
|
||||
func verifyTotalEvents(e coreclientset.EventInterface, options metav1.ListOptions, num int) error {
|
||||
events, err := e.List(options)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(events.Items) != 0 {
|
||||
return fmt.Errorf("unexpected events: %v", events.Items)
|
||||
count := 0
|
||||
for _, event := range events.Items {
|
||||
count += int(event.Count)
|
||||
}
|
||||
if count != num {
|
||||
return fmt.Errorf("expect event number %d, got %d: %v", num, count, events.Items)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user