Ticket #330: 330.patch

File 330.patch, 5.7 kB (added by nhemingway, 4 months ago)
  • a/buildbot/status/words.py

    old new  
    168168    command_STATUS.usage = "status [<which>] - List status of a builder (or all builders)" 
    169169 
    170170    def validate_notification_event(self, event): 
    171         if not re.compile("^(started|finished|success|failed|exception)$").match(event): 
     171        if not re.compile("^(started|finished|success|failed|exception|successToFailure|failureToSuccess)$").match(event): 
    172172            raise UsageError("try 'notify on|off <EVENT>'") 
    173173 
    174174    def list_notified_events(self): 
     
    310310        # only notify about builders we are interested in 
    311311        log.msg('[Contact] builder %r in category %s finished' % (builder, builder.category)) 
    312312 
    313         if not self.notify_for('finished', 'failed', 'success', 'exception', 'failedToSuccess', 'successToFailed'): 
     313        if not self.notify_for('finished', 'failed', 'success', 'exception', 'failureToSuccess', 'successToFailure'): 
    314314            return 
    315315 
    316316        if (self.channel.categories != None and 
     
    337337 
    338338        prevBuild = build.getPreviousBuild() 
    339339        if prevBuild: 
    340             prevResult = prevBuild.getResult() 
     340            prevResult = prevBuild.getResults() 
    341341 
    342342            if (self.notify_for('failureToSuccess') and prevResult == FAILURE and results == SUCCESS) or \ 
    343343               (self.notify_for('successToFailure') and prevResult == SUCCESS and results == FAILURE): 
  • a/buildbot/test/test_status.py

    old new  
    11561156        irc.buildFinished(my_builder.getName(), my_build, None) 
    11571157        self.failUnlessEqual(irc.message, "", "No finish notification generated on exception with notify_events=['exception']") 
    11581158 
     1159    def test_notification_successToFailure(self): 
     1160        irc = MyContact() 
     1161 
     1162        my_builder = MyBuilder("builder834") 
     1163        my_build = MyIrcBuild(my_builder, 862, builder.FAILURE) 
     1164        my_build.changes = ( 
     1165            Change(who = 'author1', files = ['file1'], comments = 'comment1', revision = 943), 
     1166            ) 
     1167        previous_build = MyIrcBuild(my_builder, 861, builder.SUCCESS) 
     1168        my_build.setPreviousBuild(previous_build) 
     1169 
     1170        irc.command_NOTIFY("on successToFailure", "mynick") 
     1171 
     1172        irc.message = "" 
     1173        irc.buildStarted(my_builder.getName(), my_build) 
     1174        self.failUnlessEqual(irc.message, "", "No started notification with notify_events=['failed']") 
     1175 
     1176        irc.message = "" 
     1177        irc.buildFinished(my_builder.getName(), my_build, None) 
     1178        self.failUnlessEqual(irc.message, "build #862 of builder834 is complete: Failure [step1 step2]  Build details are at http://myserver/mypath?build=765", "Finish notification generated on failure with notify_events=['successToFailure']") 
     1179 
     1180        irc.message = "" 
     1181        my_build.results = builder.SUCCESS 
     1182        irc.buildFinished(my_builder.getName(), my_build, None) 
     1183        self.failUnlessEqual(irc.message, "", "No finish notification generated on success with notify_events=['failed']") 
     1184 
     1185        irc.message = "" 
     1186        my_build.results = builder.EXCEPTION 
     1187        irc.buildFinished(my_builder.getName(), my_build, None) 
     1188        self.failUnlessEqual(irc.message, "", "No finish notification generated on exception with notify_events=['failed']") 
     1189 
     1190    def test_notification_failureToSuccess(self): 
     1191        irc = MyContact() 
     1192 
     1193        my_builder = MyBuilder("builder834") 
     1194        my_build = MyIrcBuild(my_builder, 862, builder.SUCCESS) 
     1195        my_build.changes = ( 
     1196            Change(who = 'author1', files = ['file1'], comments = 'comment1', revision = 943), 
     1197            ) 
     1198        previous_build = MyIrcBuild(my_builder, 861, builder.FAILURE) 
     1199        my_build.setPreviousBuild(previous_build) 
     1200 
     1201        irc.command_NOTIFY("on failureToSuccess", "mynick") 
     1202 
     1203        irc.message = "" 
     1204        irc.buildStarted(my_builder.getName(), my_build) 
     1205        self.failUnlessEqual(irc.message, "", "No started notification with notify_events=['success']") 
     1206 
     1207        irc.message = "" 
     1208        irc.buildFinished(my_builder.getName(), my_build, None) 
     1209        self.failUnlessEqual(irc.message, "build #862 of builder834 is complete: Success [step1 step2]  Build details are at http://myserver/mypath?build=765", "Finish notification generated on success with notify_events=['failureToSuccess']") 
     1210 
     1211        irc.message = "" 
     1212        my_build.results = builder.FAILURE 
     1213        irc.buildFinished(my_builder.getName(), my_build, None) 
     1214        self.failUnlessEqual(irc.message, "", "No finish notification generated on failure with notify_events=['success']") 
     1215 
     1216        irc.message = "" 
     1217        my_build.results = builder.EXCEPTION 
     1218        irc.buildFinished(my_builder.getName(), my_build, None) 
     1219        self.failUnlessEqual(irc.message, "", "No finish notification generated on exception with notify_events=['success']") 
     1220 
    11591221class MyIrcBuild(builder.BuildStatus): 
    11601222    results = None 
    11611223 
    11621224    def __init__(self, parent, number, results): 
    11631225        builder.BuildStatus.__init__(self, parent, number) 
    11641226        self.results = results 
     1227        self.previousBuild = None 
    11651228 
    11661229    def getResults(self): 
    11671230        return self.results 
     
    11691232    def getText(self): 
    11701233        return ('step1', 'step2') 
    11711234 
     1235    def setPreviousBuild(self, pb): 
     1236        self.previousBuild = pb 
     1237 
     1238    def getPreviousBuild(self): 
     1239        return self.previousBuild 
     1240 
    11721241class URLProducer: 
    11731242    def getURLForThing(self, build): 
    11741243        return 'http://myserver/mypath?build=765'