15db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge/*
25db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge * Copyright (C) 2015 The Android Open Source Project
35db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge *
45db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge * Licensed under the Apache License, Version 2.0 (the "License");
55db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge * you may not use this file except in compliance with the License.
65db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge * You may obtain a copy of the License at
75db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge *
85db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge *      http://www.apache.org/licenses/LICENSE-2.0
95db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge *
105db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge * Unless required by applicable law or agreed to in writing, software
115db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge * distributed under the License is distributed on an "AS IS" BASIS,
125db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge * See the License for the specific language governing permissions and
145db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge * limitations under the License
155db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge */
165db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
175db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basargepackage com.android.server.job;
185db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
195db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basargeimport android.annotation.TargetApi;
205db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basargeimport android.app.job.JobParameters;
215db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basargeimport android.app.job.JobService;
225db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basargeimport android.util.Log;
235db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
245db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basargeimport java.util.ArrayList;
255db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
265db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge@TargetApi(24)
275db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basargepublic class MockPriorityJobService extends JobService {
285db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge    private static final String TAG = "MockPriorityJobService";
295db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
305db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge    @Override
315db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge    public void onCreate() {
325db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        super.onCreate();
335db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        Log.e(TAG, "Created test service.");
345db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge    }
355db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
365db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge    @Override
375db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge    public boolean onStartJob(JobParameters params) {
385db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        Log.i(TAG, "Test job executing: " + params.getJobId());
395db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        TestEnvironment.getTestEnvironment().executedEvents.add(
405db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge                new TestEnvironment.Event(TestEnvironment.EVENT_START_JOB, params.getJobId()));
415db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        return true;  // Job not finished
425db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge    }
435db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
445db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge    @Override
455db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge    public boolean onStopJob(JobParameters params) {
465db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        Log.i(TAG, "Test job stop executing: " + params.getJobId());
475db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        int reason = params.getStopReason();
485db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        int event = TestEnvironment.EVENT_STOP_JOB;
495db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        Log.d(TAG, "stop reason: " + String.valueOf(reason));
505db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        if (reason == JobParameters.REASON_PREEMPT) {
515db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            event = TestEnvironment.EVENT_PREEMPT_JOB;
525db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            Log.d(TAG, "preempted " + String.valueOf(params.getJobId()));
535db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        }
545db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        TestEnvironment.getTestEnvironment().executedEvents
555db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge                .add(new TestEnvironment.Event(event, params.getJobId()));
565db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        return false;  // Do not reschedule
575db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge    }
585db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
595db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge    public static class TestEnvironment {
605db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
615db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        public static final int EVENT_START_JOB = 0;
625db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        public static final int EVENT_PREEMPT_JOB = 1;
635db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        public static final int EVENT_STOP_JOB = 2;
645db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
655db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        private static TestEnvironment kTestEnvironment;
665db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
675db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        private ArrayList<Event> executedEvents = new ArrayList<Event>();
685db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
695db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        public static TestEnvironment getTestEnvironment() {
705db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            if (kTestEnvironment == null) {
715db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge                kTestEnvironment = new TestEnvironment();
725db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            }
735db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            return kTestEnvironment;
745db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        }
755db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
765db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        public static class Event {
775db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            public int event;
785db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            public int jobId;
795db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
805db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            public Event() {
815db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            }
825db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
835db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            public Event(int event, int jobId) {
845db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge                this.event = event;
855db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge                this.jobId = jobId;
865db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            }
875db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
885db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            @Override
895db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            public boolean equals(Object other) {
905db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge                if (other instanceof Event) {
915db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge                    Event otherEvent = (Event) other;
925db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge                    return otherEvent.event == event && otherEvent.jobId == jobId;
935db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge                }
945db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge                return false;
955db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            }
965db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        }
975db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
985db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        public void setUp() {
995db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            executedEvents.clear();
1005db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        }
1015db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge
1025db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        public ArrayList<Event> getExecutedEvents() {
1035db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge            return executedEvents;
1045db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge        }
1055db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge    }
1065db09084c8e4efc6311754243c39962fc8e7a766Shreyas Basarge}
107