Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b03bca80 authored by Sudheer Shanka's avatar Sudheer Shanka
Browse files

Fix JobInfo.Builder to copy all fields

The JobInfo.Builder(JobInfo) constructor was not copying the
mDebugTags and mTraceTag fields from the original JobInfo object.
This could lead to incorrect behavior when creating a new JobInfo
based on an existing one.

Bug: 439696420
Test: atest services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java
Flag: EXEMPT BUGFIX
Change-Id: I051e35c419aea89d7f9135df1e928253461583a6
parent 51290cd4
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -1400,6 +1400,8 @@ public class JobInfo implements Parcelable {
            // job.
            mBackoffPolicy = job.getBackoffPolicy();
            mPriority = job.getPriority();
            mDebugTags.addAll(job.getDebugTags());
            mTraceTag = job.getTraceTag();
        }

        /**
@@ -1431,8 +1433,9 @@ public class JobInfo implements Parcelable {

        /** @hide */
        @NonNull
        public void addDebugTags(@NonNull Set<String> tags) {
        public Builder addDebugTags(@NonNull Set<String> tags) {
            mDebugTags.addAll(tags);
            return this;
        }

        /**
+22 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.app.usage.UsageStatsManager.REASON_MAIN_PREDICTED;
import static android.app.usage.UsageStatsManager.REASON_MAIN_TIMEOUT;
import static android.app.usage.UsageStatsManager.REASON_MAIN_USAGE;
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_FREQUENT;
import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
import static android.text.format.DateUtils.HOUR_IN_MILLIS;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
@@ -66,6 +67,7 @@ import android.app.job.JobInfo;
import android.app.usage.UsageStatsManagerInternal;
import android.content.ComponentName;
import android.content.pm.PackageManagerInternal;
import android.net.NetworkRequest;
import android.net.Uri;
import android.os.SystemClock;
import android.platform.test.annotations.DisableFlags;
@@ -95,6 +97,7 @@ import org.mockito.quality.Strictness;
import java.time.Clock;
import java.time.ZoneOffset;
import java.util.Arrays;
import java.util.Set;

@RunWith(AndroidJUnit4.class)
public class JobStatusTest {
@@ -107,6 +110,10 @@ public class JobStatusTest {
    private static final Uri IMAGES_MEDIA_URI = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    private static final Uri VIDEO_MEDIA_URI = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;

    private static final String TEST_TRACE_TAG = "test_trace_tag";
    private static final String TEST_DEBUG_TAG1 = "test_debug_tag1";
    private static final String TEST_DEBUG_TAG2 = "test_debug_tag2";

    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

@@ -1637,6 +1644,21 @@ public class JobStatusTest {
        assertEquals(REASON_MAIN_PREDICTED, jobStatus.getStandbyBucketReason());
    }

    @Test
    public void testCreateJobStatus_validateTags() {
        final NetworkRequest networkRequest = new NetworkRequest.Builder()
                .addCapability(NET_CAPABILITY_INTERNET)
                .build();
        final JobInfo jobInfo = new JobInfo.Builder(42, TEST_JOB_COMPONENT)
                .setRequiredNetwork(networkRequest)
                .setTraceTag(TEST_TRACE_TAG)
                .addDebugTags(Set.of(TEST_DEBUG_TAG1, TEST_DEBUG_TAG2))
                .build();
        final JobStatus jobStatus = createJobStatus(jobInfo);
        assertEquals(TEST_TRACE_TAG, jobStatus.getJob().getTraceTag());
        assertEquals(Set.of(TEST_DEBUG_TAG1, TEST_DEBUG_TAG2), jobStatus.getJob().getDebugTags());
    }

    private void markExpeditedQuotaApproved(JobStatus job, boolean isApproved) {
        if (job.isRequestedExpeditedJob()) {
            job.setExpeditedJobQuotaApproved(sElapsedRealtimeClock.millis(), isApproved);