# Copyright 2020 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from PB.recipe_modules.recipe_engine.swarming import properties
from recipe_engine.post_process import DoesNotRun, Filter, StatusFailure

DEPS = ['flutter/logs_util', 'recipe_engine/path', 'recipe_engine/file']


def RunSteps(api):
  env = {}
  api.logs_util.initialize_logs_collection(env)
  api.logs_util.upload_logs('mytaskname')
  api.logs_util.upload_logs('uniquetask', uuid='uuid-abc')
  s = api.path.cleanup_dir / 'flutter_logs_dir'
  api.logs_util.upload_test_metrics(s, 'taskname', 'hash')
  api.logs_util.upload_test_metrics('/path/to/tmp/json', 'taskname2')
  api.file.write_json('write file', s / 'errors.log', {'a': 'b'})
  api.logs_util.show_logs_stdout(s / 'errors.log')
  api.logs_util.show_logs_stdout('no_file')


def GenTests(api):
  yield api.test('basic')
