1959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle/* 2959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * Copyright (C) 2014 The Android Open Source Project 3959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * 4959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * Licensed under the Apache License, Version 2.0 (the "License"); 5959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * you may not use this file except in compliance with the License. 6959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * You may obtain a copy of the License at 7959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * 8959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * http://www.apache.org/licenses/LICENSE-2.0 9959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * 10959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * Unless required by applicable law or agreed to in writing, software 11959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * distributed under the License is distributed on an "AS IS" BASIS, 12959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * See the License for the specific language governing permissions and 14959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * limitations under the License. 15959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle */ 16959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 17959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kylepackage dexfuzz.listeners; 18959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 19959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyleimport dexfuzz.ExecutionResult; 20959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyleimport dexfuzz.executors.Executor; 21959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyleimport dexfuzz.program.Mutation; 22959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 23959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyleimport java.util.ArrayList; 24959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyleimport java.util.List; 25959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyleimport java.util.Map; 26959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 27959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle/** 28959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * Handles situation where multiple Listeners are wanted, passes notifications 29959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle * onto each Listener it is responsible for. 30959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle */ 31959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kylepublic class MultiplexerListener extends BaseListener { 32959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 33959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle private List<BaseListener> listeners; 34959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 35959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 36959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void setup() { 37959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listeners = new ArrayList<BaseListener>(); 38959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 39959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 40959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void addListener(BaseListener listener) { 41959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listeners.add(listener); 42959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.setup(); 43959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 44959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 45959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 46959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void shutdown() { 47959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 48959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.shutdown(); 49959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 50959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 51959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 52959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 53959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleSuccessfulHostVerification() { 54959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 55959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleSuccessfulHostVerification(); 56959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 57959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 58959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 59959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 60959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleFailedHostVerification(ExecutionResult verificationResult) { 61959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 62959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleFailedHostVerification(verificationResult); 63959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 64959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 65959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 66959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 67959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleFailedTargetVerification() { 68959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 69959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleFailedTargetVerification(); 70959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 71959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 72959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 73959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 74959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleIterationStarted(int iteration) { 75959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 76959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleIterationStarted(iteration); 77959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 78959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 79959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 80959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 81959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleIterationFinished(int iteration) { 82959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 83959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleIterationFinished(iteration); 84959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 85959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 86959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 87959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 88959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleTimeouts(List<Executor> timedOut, List<Executor> didNotTimeOut) { 89959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 90959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleTimeouts(timedOut, didNotTimeOut); 91959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 92959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 93959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 94959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 95959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleDivergences(Map<String, List<Executor>> outputMap) { 96959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 97959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleDivergences(outputMap); 98959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 99959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 100959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 101959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 102959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleFuzzingFile(String inputFile) { 103959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 104959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleFuzzingFile(inputFile); 105959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 106959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 107959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 108959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 109959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleSeed(long seed) { 110959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 111959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleSeed(seed); 112959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 113959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 114959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 115959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 116959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleHostVerificationSigabort(ExecutionResult verificationResult) { 117959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 118959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleHostVerificationSigabort(verificationResult); 119959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 120959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 121959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 122959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 123959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleSuccess(Map<String, List<Executor>> outputMap) { 124959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 125959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleSuccess(outputMap); 126959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 127959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 128959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 129959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 130959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleDumpOutput(String outputLine, Executor executor) { 131959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 132959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleDumpOutput(outputLine, executor); 133959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 134959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 135959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 136959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 137959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleDumpVerify(String verifyLine) { 138959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 139959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleDumpVerify(verifyLine); 140959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 141959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 142959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 143959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 144959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleMutationStats(String statsString) { 145959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 146959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleMutationStats(statsString); 147959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 148959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 149959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 150959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 151959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleTiming(String name, float elapsedTime) { 152959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 153959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleTiming(name, elapsedTime); 154959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 155959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 156959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 157959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 158959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleMutationFail() { 159959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 160959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleMutationFail(); 161959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 162959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 163959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 164959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 165959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleSummary() { 166959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 167959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleSummary(); 168959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 169959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 170959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 171959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 172959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleSuccessfullyFuzzedFile(String programName) { 173959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 174959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleSuccessfullyFuzzedFile(programName); 175959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 176959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 177959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 178959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 179959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleSelfDivergence() { 180959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 181959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleSelfDivergence(); 182959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 183959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 184959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 185959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 186959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleMessage(String msg) { 187959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 188959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleMessage(msg); 189959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 190959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 191959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 192959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 193959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleMutations(List<Mutation> mutations) { 194959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 195959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleMutations(mutations); 196959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 197959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 198959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle 199959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle @Override 200959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle public void handleArchitectureSplit() { 201959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle for (BaseListener listener : listeners) { 202959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle listener.handleArchitectureSplit(); 203959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 204959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle } 205959ffdf65f280ee90b7944a8dd610564e7f99e69Stephen Kyle} 206